たCountDownLatchは、カウントダウンコーディネーターとの契約下にあります。
使用量は、特に類似Thread.join()メソッドは、非常にシンプルであるが、参加よりも柔軟。
コードは以下の通りであります:
1 パッケージcom.moon.forum.controller; 2 。3 インポートjava.util.concurrent.CountDownLatch; 4 インポートjava.util.concurrent.TimeUnit; 5 。6つの パブリック クラスのテスト{ 7。 パブリック 静的 ボイドメイン(文字列[]引数){ 8。 トライ{ 9。 // カウントダウン初期値5。 10 最終のAたCountDownLatchカウント= 新しい新たCountDownLatch(5。 ) 。11 用(INT I = 0、I <5; I ++ ){ 12は 新しい新しい(スレッド){ 13、IS 公共 ボイドRUN(){ 14 のtry { 15 のThread.sleep(6000 ); 16 } キャッチ(例外E1){ 17 のSystem.out.println( "間違った" ); 18である } 。19 のSystem.out.println(「Iスレッド"+にThread.currentThread()のgetName() +" "完成); 20は 21である // デクリメント 22で count.countDown(); 23である } 24 } .start(); 25 } 26がある のSystem.out.println( "開始待ち" ); 27 28 // メインスレッド待ち 29 ブールタイムアウトcount.await =(5 、TimeUnit.SECONDS); 30 のSystem.out.println( "上" + タイムアウト)。 31である } キャッチ(例外E){ 32 のSystem.out.println( "間違った" ); 33 } 34 } 35 }
上記のコードは、それを理解することは超簡単です。これは、5つのサブスレッドを開くためにメインスレッドです。カウントダウンタイマーがゼロのときマイナス1へのカウントダウンは、メインスレッドはその後、ダウン行われた場合、その後それぞれの子スレッドのカウントダウンは、メソッドを呼び出し、と。
子スレッドがブロックされているように、Aがある場合でも、その通常のawait(5、TimeUnit.SECONDS)、それを実行する方法はありませんメインスレッドを引き起こす可能性があり、彼は私が唯一どのくらい、日付は待つことができなかったことを言いました!ない横暴な?
しかし、これは関係なく、メインスレッドが実行されていない子スレッドの、彼が実行し続け、さらに最大待ち時間よりも、暗黙の事実を持っていますが、それは、サブスレッドの実行を継続します。これは、メインスレッドと子スレッドの同時実行が表示されます場合です。
我々は時間を使用して、この事業では、子スレッドかの時にタイムアウトとメイク補償ロジックのメインスレッドであるため、我々は注意してください:サブスレッド遅かれ早かれ実行するので。