多线程篇(CountDownLatch和CyclicBarrier)

应用场景

客户端一个请求过来,服务端要并行的执行多个动作,最后将结果汇总,统一返回给客户端。

举个栗子:顾客到麦当劳点餐,下单之后,好几个配餐人员一起工作,有的拿薯条,有的拿可乐,有的准备汉堡,都准备好了,才叫顾客,然后顾客端着餐盘高高兴兴的就餐。

最开始,我只用了Fature,因为当你调用Fature的get()方法获取结果的时候,会等待直到计算完成;

后来我发现加一个倒计时也可以。

时间: 2025-01-01 12:05:19

多线程篇(CountDownLatch和CyclicBarrier)的相关文章

Java多线程:CountDownLatch、CyclicBarrier 和 Semaphore

场景描述: 多线程设计过程中,经常会遇到需要等待其它线程结束以后再做其他事情的情况,比如多线程下载文件,每个线程都会下载文件的一部分,在所有线程结束以后,需要将各部分再次拼接成一个完整的文件. 有几种方案: 1.在主线程中设置一自定义全局计数标志,在工作线程完成时,计数减1.主线程侦测该标志是否为0,一旦为0,表示所有工作线程已经完成. 2.使用Java标准的类CountDownLatch来完成这项工作,原理是一样的,计数. CountDownLatch 一个同步辅助类,在完成一组正在其他线程中

多线程-CountDownLatch,CyclicBarrier,Semaphore,Exchanger,Phaser

CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待.用给定的计数初始化CountDownLatch.调用countDown()计数减一,当计数到达零之前await()方法会一直阻塞,计数无法被重置. public class CountDownLatch { private final Sync sync; public CountDownLatch(int count); public void countDown() { syn

JAVA 多线程(10):join 的哥们和朋友 countDownLatch、CyclicBarrier、Semaphore、Exchanger

Join 方法可以使当前线程等待子线程,如果子线程未结束,则会一致处在wait状态. 因为其内部是通过wait 方法实现的,当执行完毕后会调用notifyAll 释放锁. CountDownLatch 允许一个或多个线程等待其他线程完成操作,相比join ,能做的事情更多. private static CountDownLatch countDownLatch = new CountDownLatch(2); public static void main(String[] args){ Th

java并发编程之CountDownLatch与CyclicBarrier

CountDownLatch和CyclicBarrier是jdk concurrent包下非常有用的两个并发工具类,它们提供了一种控制并发流程的手段.本文将会提供一些应用场景,结合源码,对它们的具体实现以及如何使用做一个具体分析. CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. CountDownLatch使用案例 需求:解析一个文件下多个txt文件数据,可以考虑使用多线程并行解析以提高解析效率.每一个线程解析一个文件里的数据,等到所有数据解析

使用CountDownLatch和CyclicBarrier处理并发线程

闲话不说,首先看一段代码: { IValueCallback remoteCallback = new IValueCallback.Stub() { <strong><span style="color:#ff0000;">(B)</span></strong> public void onReceiveValue(final Bundle value) throws RemoteException { synchronized (sy

并发工具类:CountDownLatch、CyclicBarrier、Semaphore

在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch.CyclicBarrier.Semaphore. 一.CountDownLatch 1 import java.util.concurrent.CountDownLatch; 2 3 4 public class CountDownLatchTest 5 { //设置N为2 6 static CountDownLatch c = new CountDownLatch(2); 7 p

用CountDownLatch和CyclicBarrier处理并发线程

闲话不说,先来看一段代码: { IValueCallback remoteCallback = new IValueCallback.Stub() { <strong><span style="color:#ff0000;">(B)</span></strong> public void onReceiveValue(final Bundle value) throws RemoteException { synchronized (sy

java并发编程中CountDownLatch和CyclicBarrier的使用

转自:http://blog.csdn.net/hbzyaxiu520/article/details/6183714 在多线程程序设计中,经常会遇到一个线程等待一个或多个线程的场景,遇到这样的场景应该如何解决? 如果是一个线程等待一个线程,则可以通过await()和notify()来实现: 如果是一个线程等待多个线程,则就可以使用CountDownLatch和CyclicBarrier来实现比较好的控制. 下面来详细描述下CountDownLatch的应用场景: 例如:百米赛跑:8名运动员同时

并发编程常用工具类之countDownLatch和cyclicBarrier的使用对比

1.CountDownLatch           countDownLatch的作用是让一组线程等待其他线程完成工作以后在执行,相当于加强版的join(不懂可以百度一下join的用法),一般在初始化的时候会在构造方法传入计数器, 后续,在其他线程中每次调用countDown方法计数器减一,一般在需要等待的线程中调用countDownLatch的await方法阻塞线程,在当计数器为0时,等待线程继续运行. 光看上面的定义描述不是很直观,我们再来结合代码看一下实际运用: 1 public cla

CountDownLatch和Cyclicbarrier概念、区别及原理

CountDownLatch和Cyclicbarrier概念.区别及原理 1.概念   CountDownLatch:具有计数器的功能,等待其他线程执行完毕,主线程在继续执行,用于监听某些初始化操作,并且线程进行阻塞,等初始化执行完毕后,通知主线程继续工作执行.值得注意的是CountDownLatch计数的次数一定要与构造器传入的数字一致,比如构造器传入的是3,则countDown()一定要执行3次,否则线程将一直阻塞.CountDownLatch通常用来控制线程等待,它可以让线程等待倒计时结束