状態のスレッドを待って

スレッド状態の6種類:

  NEW:まだ開始されていないスレッドが
  実行可能な:Javaスレッドは、仮想マシンで実行されている
  ブロッカー:遮断すると、モニターのロックねじを待つことによって
  TIMED_WAITING:指定された待機時間が休眠状態にある内WAITING:無期限休止状態  TERMINATED:終了したスレッド
  

定義:次のようにAPIで導入待機状態:まず、別のスレッドの実行スレッドがアクションをウェイクアップするためのGeは無期限に待機しています実際には、ここでは、スレッド間通信の知識を必要とする-ウェイクアップ機構を待ちます。
たとえば、
上司は、待機()メソッドを呼び出して、バーベキューの種類と量を知らせる(無期限に待機)状態をWAITINGにCPUの実装の使用を放棄する:スレッド顧客(消費者)を作成するには
ボススレッド(プロデューサー)を作成するために:花をバーベキューを行うには5秒、よくバーベキューの後、呼び出し通知()メソッド、バーベキュー食べるためにウェイクアップ顧客
の注意を:
顧客と上司のスレッドが待ちがあることを確認するために、包ま同期ブロックを使用しての実施にのみ目を覚ます必要があります
ロックオブジェクトの同時使用一意性を保証しなければならない
唯一のロックオブジェクトをすることができる方法を待ち、通知を呼び出す
メソッドObjectクラス
  )(空待ち:他のスレッドで、この主題を呼び出す方法)(前に通知したりのnotifyAll()メソッドは、現在のスレッドを待機させ
  、ボイド待機を(長いマイル) :パラメータがある、そして、RUNNABLEまたはブロックされた状態のジャンプ、自動的にウェイクアップ目を覚ますことはありません、時間が来る、待機を調節されて
  、ウェイクアップこのオブジェクトのモニターで待機中の単一のスレッド、複数のスレッドがある場合:notify()のボイドランダムウェイク
  )(ボイドのnotifyAllを:ウェイクアップすべてのスレッドがこのオブジェクトのモニターで待機中

の直接見て、次の テストコードタイプ:
以下のためのパッケージ変更com.shopping.test; 

パブリック クラスWaitAndNotify { 
    公共の 静的な 無効メイン(文字列[] args)を{
         // ロックオブジェクトのみ保証作成
        決勝オブジェクトOBJ = 新しい新しいオブジェクトを();
         // スレッドのお客様作成
        の新しい新しいスレッドを(){
             公共 ボイドRUNは(){
                 // スレッドが目を覚ますのを待っている、唯一の実行を確認し、シンクロナス・テクノロジを使用する必要が
                同期(OBJ){ 
                    System.out.printlnは(「顧客:バーベキューは、種類と数量の所有者に通知するための」);
                     // waitメソッドを呼び出して、無限の待機待ち状態にCPUを放棄
                    試して{
                        // 異常コンパイルしますが、親クラスがスロー例外声明、またサブクラスに実行されないように宣言されていないが、スロー
                        )obj.waitを(; 
                    } キャッチ(InterruptedExceptionあるE){ 
                        e.printStackTrace(); 
                    } 
                    // ですコードの後に目を覚ます 
                    のSystem.out.println( "顧客:オープン食べる" ); 
                } 
            } 
        } .startを(); 

        // スレッドボス(プロデューサー)を作成し
        、新たな新しいスレッド(){
             公共 ボイドRUN(){
                 // ボスをそれはバーベキューを行うには5秒かかった
                試み{ 
                    のThread.sleep( 5000 ); 
                }キャッチ(例外:InterruptedException E){ 
                    e.printStackTrace(); 
                } 
                同期(OBJ){
                     // バーベキューがすでに行っている、ウェイク顧客バーベキューを食べる 
                    のSystem.out.println( "ボス:barbecue've行わ" );
                     //は通知呼び出し()メソッド、スレッドウェイク顧客
                    obj.notify(); 
                } 
            } 
        } .start(); 
    } 

    //説明:ボス始まったばかりのスレッドが眠っていた、それは顧客が最初のスレッドを開始し、最初のスレッド同期コードブロックの中に確かに顧客であります実行

  

}
出力:
    お客様:バーベキューの種類と量通知するボス
    ボス:バーベキューがすでに行っている
    顧客:食べにオープンし
 、これはテストクラスの直接のテストで、特定のプロジェクトがある場合に実行する必要があります

おすすめ

転載: www.cnblogs.com/wyf-love-dch/p/11407311.html