CountDownLatch和CyclicBarrier都在多线程环境中使用,它们都是其中的一部分。
根据Java Doc-
CountDownLatch-同步辅助,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。
CyclicBarrier-同步帮助,允许一组线程互相等待以到达一个公共的障碍点。
序号 | 键 | 循环屏障 | CountDownLatch |
---|---|---|---|
1 |
基本的 |
同步帮助,允许一组线程互相等待以到达一个公共的障碍点。 |
一种同步帮助,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成为止。 |
2 |
可笑的 |
它具有可以提供Runnable的构造函数。 |
它没有这样的构造函数 |
3 |
线程/任务 |
它维护线程数 |
它维护着许多任务 |
4。 |
一个先进的 |
这是不先进的 |
这是先进的。 |
5 |
例外 |
如果一个线程在等待时被中断,则所有其他等待线程将抛出B rokenBarrierException |
仅当前线程将抛出 InterruptedException。不会影响其他线程 |
public class Main { public static void main(String args[]) throws InterruptedException { ExecutorService executors = Executors.newFixedThreadPool(4); CyclicBarrier cyclicBarrier = new CyclicBarrier(5); executors.submit(new Service1(cyclicBarrier)); executors.submit(new Service1(cyclicBarrier)); executors.submit(new Service2(cyclicBarrier)); executors.submit(new Service2(cyclicBarrier)); executors.submit(new Service2(cyclicBarrier)); Thread.sleep(3000); System.out.println("Done"); } } import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class Service1 implements Runnable { CyclicBarrier cyclicBarrier; public Service1(CyclicBarrier cyclicBarrier) { super(); this.cyclicBarrier = cyclicBarrier; } @Override public void run() { System.out.println("Services1" + cyclicBarrier.getNumberWaiting()); while (true) { try { cyclicBarrier.await(); } catch (InterruptedException | BrokenBarrierException e) { //TODO自动生成的捕获块 e.printStackTrace(); } } } } import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class Service2 implements Runnable { CyclicBarrier cyclicBarrier; public Service2(CyclicBarrier cyclicBarrier) { super(); this.cyclicBarrier = cyclicBarrier; } @Override public void run() { System.out.println("Services2" + cyclicBarrier.getNumberWaiting()); while (true) { try { cyclicBarrier.await(); } catch (InterruptedException | BrokenBarrierException e) { //TODO自动生成的捕获块 e.printStackTrace(); } } } }
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自动生成的捕获块 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自动生成的捕获块 e.printStackTrace(); } latch.countDown(); System.out.println("Services2"+latch.getCount()); } }
本文向大家介绍基于CyclicBarrier和CountDownLatch的使用区别说明,包括了基于CyclicBarrier和CountDownLatch的使用区别说明的使用技巧和注意事项,需要的朋友参考一下 2018.12.12更新 在学习了CyclicBarrier之后发现,CyclicBarrier也可以实现跟CountDownLatch类似的功能,只需要在它的parties中多设置一个数
问题内容: 我们的一位培训人员在解释CountDownLatch和CyclicBarrier之间的区别时给出了一个示例。 :假设一块石头可以举起10个人,那么您将等待所有10个人来来。然后只有您才能抬起石头。 :如果您要去野餐,则需要首先在某个共同点上认识,从这里大家开始旅程。 如果有人同意这些意见,请给我一些细节。 我已经阅读了这两个类的sun API。但我需要更多解释。 问题答案: 关键区别在
今天我发现,对于java中的并发,我们有像这样的好框架,我还发现,有一个像这样的反应式编程框架,用于在应用程序中执行。但是我仍然很困惑!为什么两者都比框架好? 如今,反应式编程是一个成熟的话题,大多数语言都支持函数式反应式编程,例如为不止一种语言提供有关的API。是用于、等的API之一。根据,他们在内部使用参与者来维护和也使用进行编程。 那么,Akka和反应式编程方法之间的区别是什么?为什么它们在
本文向大家介绍Java并发实例之CyclicBarrier的使用,包括了Java并发实例之CyclicBarrier的使用的使用技巧和注意事项,需要的朋友参考一下 最近一直整并发这块东西,顺便写点Java并发的例子,给大家做个分享,也强化下自己记忆,如果有什么错误或者不当的地方,欢迎大家斧正。 CyclicBarrier是一种多线程并发控制实用工具,和CountDownLatch非常类似,它也可以
问题内容: 我需要一些帮助,以了解使用CountDownLatch与传统的wait- notify相比的优势。我认为notifyAll()确实做了同样的事情,并且似乎更易于使用(可能是由于熟悉)。 另外,CountDownLatch中的wait()和await()有什么区别? 谢谢 ! 编辑:我想我需要改写我的查询: Await()根据文档说: 使当前线程 等待, 直到锁存器递减计数到零为止,除非
本文向大家介绍详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别,包括了详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别的使用技巧和注意事项,需要的朋友参考一下 前言 CountDownLatch和CyclicBarrier两个同为java并发编程的重要工具类,它们在诸多多线程并发或并行场景中得到了广泛的应用