たCountDownLatchの概要

1:コンセプトは動作します:

  別のスレッドのためのスレッドを待機させるたCountDownLatchこのクラスは、その実行前に終了します。カウンタによって達成され、カウンタの初期値は、スレッドの数です。スレッドが終了するたびに、カウンタの値は-1カウンタはすべてのスレッドが実行され、その後、ラッチ待機スレッドに仕事に戻ることができることを示し、0のとき。


2:一般的なAPIの概要:
//参数count为计数值
public CountDownLatch(int count) { };

 スレッドの//コールのawait()メソッドが中断されたカウントが実行を続行する前に0になるまで、それは待機する
 公共ボイドのawait()をInterruptedExceptionある{}スロー;
 )//とのawaitを(類似しているが、後に一定時間待機そして、それが進まないだろう、値が0になりカウント
 (ロングタイムアウト、TimeUnitでユニット)スローパブリックブールのawaitをInterruptedExceptionある{};
 //保存countの値1。
 公共のボイドCOUNTDOWN(){};

3:このクラスは、マルチスレッド化されており、密接な関係は、通常、マルチスレッド環境で使用すると、スレッドプールを併用

4:コードは以下の通り:

{クラスCountDownLatchTest公共

のpublic static無効メイン(文字列[] args){
最終LATCH AたCountDownLatch AたCountDownLatch新しい新=(2)
のSystem.out.printlnは( "メインスレッドが開始実行...... ......");
//最初の子スレッド実行する
ExecutorServiceのExecutors.newSingleThreadExecutor ES1 =();
es1.execute(Runnableを新新(){
@Override
ます。public void RUN(){
試み{
のThread.sleep(3000);
System.out.printlnは( "子スレッド:" +スレッド。 。currentThread()のgetName()+ " 実行");
}キャッチ(InterruptedExceptionあるE){
e.printStackTrace();
}
latch.countDown()。
}
});
Es1.shutdown();
//第2のサブスレッド実行
ExecutorServiceのExecutors.newSingleThreadExecutor ES2 =();
es2.execute(Runnableを新しい新しい(){
@Override
公共ボイドRUN(){
試み{
のThread.sleep(3000 );
}キャッチ(InterruptedExceptionあるE){
e.printStackTrace();
}
のSystem.out.println( "子スレッド:" +にThread.currentThread()のgetName ()+ " 実行");
latch.countDown();
}
});
es2.shutdown();
のSystem.out.println() "...... ......二つのスレッドが終了待ち";
{試し
latch.await();
}キャッチ(InterruptedExceptionあるE){
e.printStackTrace();
}
のSystem.out.printlnは( "2つのつの子スレッドが終了し、メインスレッドに進む");
}
}

実行結果を以下に示します。 :

メインスレッドは、実行...... ......始まる
...... ...... 2つのスレッドが終了した待機を
プール-1スレッド1が実行します。子スレッドは、
子スレッド:のプール-2-スレッド-1の実装
、終了している2つのサブスレッドをメインに進んでスレッド



 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/jelly12345/p/12108217.html