2019年6月4日の下でJavaのマルチスレッドの学習日記day25

シングルトンデザインパターン

  そのデザインモードを確認します。確実にするために、そのメモリで唯一のオブジェクトクラス

メモリ内のその1つのオブジェクトのみの涙を確保する方法

  オブジェクトのこのクラスの別のクラスを作成するのではなく、再生するためにコントロールクラスを作成します。プライベート

  本発明のこのクラスのクラスオブジェクトを再定義します。シングルトンの;

  一般的なアクセス方法を提供すること、公共静的シングルトンのgetInstance(){戻りS}

 

1.式のこの方法の開発を飢え

インタビューをこのように書くことが怠惰な2タイプ

空腹の男のスタイルは、怠惰な人間は宇宙の時間の時間のためのスペースです

マルチスレッドアクセスは、複数のオブジェクトタイプ、および怠惰な人を作成しません飢えた男は、複数のオブジェクトを作成する可能性がある場合には

パブリック クラスdemo1_Singleton { 

    公共 静的 ボイドメイン(文字列[]引数){
         // シングルトンシングルトン新しい新しいS1 =();メンバ変数は、民営化されていない直接
         // シングルトンS1 = Singleton.s;
         // シングルトンS2がシングルトンを=で。 S;
         // するSystem.out.println(== S1 S2)、
        
        シングルトンS1 = Singleton.getInstance(); 
        シングルトンS2 = Singleton.getInstance(); 
        
        System.out.printlnは(S1 == S2); 

    } 

} 
/ * //飢え式
クラスシングルトン{  
    //プライベートコンストラクタ、他のクラスはのコンストラクタにアクセスすることはできません
    プライベートシングルトンは、(){} 
    //クラスオブジェクトを作成します
     ; Sはシングルトン静的新しい新しいプライベートシングルトン()= 
     //共通の外部アクセス方法を提供する
     パブリック静的シングルトンのgetInstance(){//インスタンスが取得
         Sを返す; 
     } 
} * / 

// シングルトンの遅延、遅延線装荷パターン
クラスシングルトン{
     // プライベートコンストラクタ、他のクラスは、コンストラクタにアクセスすることができない
    プライベートシングルトン(){}
     // クラスオブジェクト作成
     プライベート  静的シングルトン= S 新しい新しいシングルトン();
      // 外部アクセス方法に共通提供
     パブリック 静的シングルトンのgetInstanceを(){ // 例をゲット
         IF(S == nullの){ 
            S= 新しいシングルトン()。
        } 
         戻りS。
     } 
}
ケース

 

マルチスレッド(ランタイムクラス)

  *ランタイムクラスは、単一のクラスの例です。

パブリック クラスdemo2_Runtime { 

    公共 静的 ボイドメイン(文字列[]引数)がスローIOExceptionが{ 
        ランタイムR1 = Runtime.getRuntime()。
        // r1.exec( "シャットダウンは、-s -t 300"); 
        r1.exec( "シャットダウン-a" ); 

    } 

}
ケース

 

タイマー:タイマー

年 - 1900年のマイナス

月 - 0-11の間の月

日 - 1月1-3間の1日

時間 - 0-23の間の時間数

分 - 0-59分の間

秒 - 0から59の間の秒

インポートjava.util.Date;
 輸入java.util.Timer;
 インポートjava.util.TimerTask、

パブリック クラスdemo3_Timer { 

    / ** 
     * @paramの引数
     * @throws InterruptedExceptionある 
      * / 
    パブリック 静的 ボイドメイン(文字列[]引数)がスローInterruptedExceptionあるが{ 
        タイマTは = 新しい新しいタイマ();
         // 指定された指定された時間にスケジュールされたタスク
         // タスクがスケジュールされている最初のパラメータは、2番目のパラメータは実行時である、第三のパラメータが長すぎる繰り返される実行 
        t.schedule(新新 MyTimerTask()、新新日付(119、5、5、0、30、10)、3000 )。    
        
        一方、){ 
            のThread.sleep( 1000年)。
            System.out.println(新しい日付()); 
        } 
    } 

} 

クラス MyTimerTaskは延びTimerTaskを{ 

    @Override 
    公共 ボイドラン(){ 
        System.out.printlnは( "要起床了" )。
    } 
}
ケース

 

二つのスレッド間の通信

  複数のスレッドが同時に実行され、CPUのデフォルトのランダムなスレッド切り替え

  我々は彼らが定期的に実行する必要がしたい場合は、各スレッドが印刷を実行し、例えば、通信を使用することができます

どのようにコミュニケーション

  あなたは、スレッドが(待つの呼び出しを待つしたい場合)

  あなたがスレッドを待って目を覚ますしたい場合は、()を呼び出し通知

  これらの2つの方法は、その後、同期コードを実行する必要があり、同期ロックオブジェクトを使用して呼び出すこと

パブリック クラスdemo1_Notify { 

    公共 静的 ボイドメイン(文字列[]引数){ 
        プリンタP1 = 新しいプリンタ()。
        新しいスレッド(){
             公共 ボイドラン(){
                 ながら、){
                     試み{ 
                        p1.print1(); 
                    } キャッチ(InterruptedExceptionある電子){
                         // TODO自動生成キャッチブロック
                        e.printStackTrace(); 
                    }  
                }
            } 
        } .start(); 
        新しいスレッド(){
             公共 ボイドラン(){
                 ながら、){
                     試み{ 
                        p1.print2(); 
                    } キャッチ(InterruptedExceptionある電子){
                         // TODO自動生成キャッチブロック
                        e.printStackTrace(); 
                    } 
                } 
            } 
        } .start(); 

    } 

} 
クラスプリンタ{
     プライベート int型フラグ= 1パブリック ボイド PRINT1()はスローInterruptedExceptionある{
         同期を){
             場合(!フラグ= 1 ){
                 この .WAIT()。  // 当前线程等待
            } 
        System.out.print( "明" )。
        System.out.print( "天" ); 
        System.out.print( "是" ); 
        System.out.print( "好" ); 
        System.out.print( "日" ); 
        System.out.print( "子" ); 
        System.out.print( "\ r \ n"が
        フラグに = 2 ;
         この .notify(); // 個々待っランダムウェイクアップスレッド
        
    } 
}     
    公共 ボイド)PRINT2は(スローInterruptedExceptionある{
          同期){
              IF(!フラグに= 2 {)
                 この; .WAIT()
            } 
        システム。 Out.print( "今" ); 
        System.out.print(の "日" ); 
        System.out.print(の "日" ); 
        System.out.print(の "ガス" )。
        System.out.printの( "真"); 
        System.out.print( "好" ); 
        System.out.print( "\ rをする\ n" ); 
        フラグ = 1 この.notify(); 
    } 
 } 
}
ケース

 

3の間に三つ以上の通信スレッド

 通信の問題の*複数のスレッド

  ランダムウェイクアップつのスレッド*通知()メソッド

  *すべてのスレッドのnotifyAll()メソッドを覚まします

  * JDK5は、指定されたスレッドの前に目を覚ますことができません

  繰り返し決意条件を使用している間*複数のスレッド間の通信は、使用のnotifyAllを(必要な場合)、すべてのスレッドに通知します

 

JDK1.5の新機能ミューテックス

シンクロナス

  同期させるために(ロックReentrantLockのクラスを使用)と()メソッドのロックを解除

通信

  newCondition ReentrantLockのクラス()メソッドは、オブジェクトの条件を取得し、使用します

  await()メソッド、ウェイクアップ時間信号に()メソッドを使用するのを待つための条件時間

  異なるスレッドは、条件を使用するので、あなたは、ウェイクアップされたスレッドの時間を見つけるために区別することができます

  

おすすめ

転載: www.cnblogs.com/JungTan0113/p/10973995.html