CountDownLatch と CyclicBarrier はどちらもマルチスレッド環境で使用され、その一部です。
Java Doc によると -
CountDownLatch - 他のスレッドで実行された一連の操作が完了するまで 1 つ以上のスレッドを待機できるようにする同期補助。
CyclicBarrier - スレッドのグループが共通のバリア ポイントに到達するまで相互に待機できるようにする同期補助。
Key | CyclicBarrier | CountDownLatch | |
---|---|---|---|
1 | #Basic | 共通の障害点に到達するのをすべて待機しているスレッドのグループの同期を可能にします。 | 他のスレッドで実行された一連の操作が完了するまで 1 つ以上のスレッドが待機できるようにする同期補助。 |
実行中 |
| Runnable を提供できるコンストラクターがあります。 そのようなコンストラクターはありません | Thread / task | スレッド数を維持します | タスク数を維持します | tr> |
##高度な拡張が可能です |
使用はお勧めしません |
使用することをお勧めします使用します。 |
|
例外 |
スレッドがブロックされている間にスレッドがブロックされた場合待機中 中断されると、待機中の他のすべてのスレッドが BrokenBarrierException をスローします。 |
現在のスレッドのみが | #InterruptedException をスローし、他のスレッドには影響しません#CyclicBarrier の例 |
public class Main { public static void main(String args[]) throws InterruptedException { ExecutorService executors = Executors.newFixedThreadPool(4); CountDownLatch latch= new CountDownLatch(2); executors.submit(new Service1(latch)); executors.submit(new Service2(latch)); latch.await(); System.out.println("Done"); } } import java.util.concurrent.CountDownLatch; public class Service1 implements Runnable { CountDownLatch latch; public Service1(CountDownLatch latch) { super(); this.latch = latch; } @Override public void run() { try { Thread.sleep(20000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } latch.countDown(); System.out.println("Services2"+latch.getCount()); } } import java.util.concurrent.CountDownLatch; public class Service2 implements Runnable { CountDownLatch latch; public Service2(CountDownLatch latch) { super(); this.latch = latch; } @Override public void run() { try { Thread.sleep(20000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } latch.countDown(); System.out.println("Services2"+latch.getCount()); } }
以上がJava 同時実行における CountDownLatch と CyclicBarrier の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。