CyclicBarrier能实现的效果是多个线程同时执行,这些线程执行的时间不一。但是要求在某一个点上,需要这些线程都执行完毕了之后,全部线程才能往下执行。
下面是示例程序:
ExecutorService service = Executors.newCachedThreadPool();
final CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
for(int i = 0;i<3;i++){
Runnable runnable = new Runnable(){
Random random = new Random();
@Override
public void run() {
try {
Thread.sleep(random.nextInt(5000));
System.out.println("point 1:"+Thread.currentThread().getName()+" execute complate.");
cyclicBarrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
try {
Thread.sleep(random.nextInt(5000));
System.out.println("point 2:"+Thread.currentThread().getName()+" execute complate.");
cyclicBarrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
try {
Thread.sleep(random.nextInt(5000));
System.out.println("point 3:"+Thread.currentThread().getName()+" execute complate.");
cyclicBarrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
try {
Thread.sleep(random.nextInt(5000));
System.out.println("point 4:"+Thread.currentThread().getName()+" execute complate.");
cyclicBarrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
};
service.execute(runnable);
//service.shutdown();
}
执行结果:
point 1:pool-1-thread-3 execute complate.
point 1:pool-1-thread-2 execute complate.
point 1:pool-1-thread-1 execute complate.
point 2:pool-1-thread-2 execute complate.
point 2:pool-1-thread-1 execute complate.
point 2:pool-1-thread-3 execute complate.
point 3:pool-1-thread-3 execute complate.
point 3:pool-1-thread-1 execute complate.
point 3:pool-1-thread-2 execute complate.
point 4:pool-1-thread-1 execute complate.
point 4:pool-1-thread-2 execute complate.
point 4:pool-1-thread-3 execute complate.
可以看到,到达么一个点的顺序可能不固定,但是没有说一个线程才到达point1的时候,另外一个线程已经达到point2了,即大家共同达到一个点之后才会继续往下执行。
分享到:
相关推荐
JAVA并发编程-2-线程并发工具类一、Fork/Join1、分而治之与工作密取2、使用标准范式3、Fork/Join的同步用法4、Fork/Join的异步用法二、CountDownLatch三、CyclicBarrier四、Semaphore信号量五、Exchanger ...
CyclicBarrier类似于CountDownLatch也是个计数器,不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数,当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续...
一、总论:在JDK中提供了几种并发工具类 1)CountDownLatch(同步倒数计数器:等待多线程(或者多步骤)完成) 2)CyclicBarrier(循环屏障:同步屏障) 3)Semaphore(信号量:控制并发进程数) 主要参考...
【2018最新最详细】并发多线程教程,课程结构如下 ...25.大白话说java并发工具类-CountDownLatch,CyclicBarrier 26.大白话说java并发工具类-Semaphore,Exchanger 27.一篇文章,让你彻底弄懂生产者--消费者问题
CyclicBarrier循环栅栏; 重⼊锁可以完全替代synchronized关键字。在JDK5.0的早期版本中,重⼊锁的性能远远好于 synchronized,但从JDK6.0开始,JDK在synchronized上做了⼤量的优化,使得两者的性能差距并 不⼤。重...
JUC(Java Util Concurrent)是Java中用于并发编程的工具包,提供了一组接口和类,用于...并发工具类:JUC提供了一些并发编程的工具类,如Semaphore、CountDownLatch、CyclicBarrier等,可以实现线程间的协作和同步。
高并发编程第三阶段19讲 CyclicBarrier工具的使用场景介绍_.mp4 高并发编程第三阶段20讲 CyclicBarrier vs CountDownLatch_.mp4 高并发编程第三阶段21讲 Exchanger工具的使用以及常见问题分析-上_.mp4 高...
并发工具类CyclicBarrier 详解.mp4 并发工具类Semaphore详解.mp4 并发工具类Exchanger详解.mp4 CountDownLatch,CyclicBarrier,Semaphore源码解析.mp4 提前完成任务之FutureTask使用.mp4 Future设计模式实现(实现...
Java并发编程基础主要包括以下几个核心方面: ...并发工具类:掌握Java并发包java.util.concurrent中提供的各种工具类,如CountDownLatch、CyclicBarrier、Semaphore等,它们简化了并发编程的复杂性。
高并发编程第三阶段19讲 CyclicBarrier工具的使用场景介绍_.mp4 高并发编程第三阶段20讲 CyclicBarrier vs CountDownLatch_.mp4 高并发编程第三阶段21讲 Exchanger工具的使用以及常见问题分析-上_.mp4 高...
第38节并发工具类CyclicBarrier 详解00:11:52分钟 | 第39节并发工具类Semaphore详解00:17:27分钟 | 第40节并发工具类Exchanger详解00:13:47分钟 | 第41节CountDownLatch,CyclicBarrier,Semaphore源码解析00:29:57...
第38节并发工具类CyclicBarrier 详解00:11:52分钟 | 第39节并发工具类Semaphore详解00:17:27分钟 | 第40节并发工具类Exchanger详解00:13:47分钟 | 第41节CountDownLatch,CyclicBarrier,Semaphore源码解析00:29:57...
CountDownLatch、CyclicBarrier、Semaphore这些线程协作工具类是基于AQS的,看完这篇博客后可以去看下面这篇博客,了解它们是如何实现的。 Java并发之AQS详解 CountDownLatch CountDownLatch可以实现一个线程等待多...
第二章 线程的并发工具类 21 一、 Fork/Join框架的介绍 21 1、实现步骤: 22 2、工作窃取算法 22 3、分而治之 23 4、Fork/Join使用的标准范式 24 5、Fork/Join框架的异常处理 26 6、Fork/Join框架的实现原理 26 二、...
1.1 并发编程与线程协作 1.2 CyclicBarrier概述 CyclicBarrier的基本用法 2.1 创建CyclicBarrier对象 2.2 await()方法 控制线程协作数量 3.1 场景介绍 3.2 使用CyclicBarrier控制线程协作 循环使用CyclicBarrier 4.1...
第38节并发工具类CyclicBarrier 详解00:11:52分钟 | 第39节并发工具类Semaphore详解00:17:27分钟 | 第40节并发工具类Exchanger详解00:13:47分钟 | 第41节CountDownLatch,CyclicBarrier,Semaphore源码解析00:29:57...
第38节并发工具类CyclicBarrier 详解00:11:52分钟 | 第39节并发工具类Semaphore详解00:17:27分钟 | 第40节并发工具类Exchanger详解00:13:47分钟 | 第41节CountDownLatch,CyclicBarrier,Semaphore源码解析00:29:57...
7、并发工具类CountDownLatch 、CyclicBarrier和Semaphore底层实现原理 8、线程池原理和如何使用线程池 9、ThreadLocal 为什么会内存泄漏 10、Volatile底层实现原理 11、AQS源码分析 12、CAS原理分析和使用场景 13、...
主要介绍了Java并发编程(CyclicBarrier)实例详解的相关资料,JAVA编写并发程序的时候,我们需要仔细去思考一下并发流程的控制,如何让各个线程之间协作完成某项工作。