- import java.util.Random;
- import java.util.concurrent.CyclicBarrier;
- /** *//**
- * CyclicBarrier类似于CountDownLatch也是个计数器,
- * 不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数,
- * 当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续。
- * CyclicBarrier就象它名字的意思一样,可看成是个障碍,
- * 所有的线程必须到齐后才能一起通过这个障碍。
- * CyclicBarrier初始时还可带一个Runnable的参数,
- * 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。
- */
- public class CyclicBarrierTest {
- public static class ComponentThread implements Runnable {
- CyclicBarrier barrier;// 计数器
- int ID; // 组件标识
- int[] array; // 数据数组
- // 构造方法
- public ComponentThread(CyclicBarrier barrier, int[] array, int ID) {
- this.barrier = barrier;
- this.ID = ID;
- this.array = array;
- }
- public void run() {
- try {
- array[ID] = new Random().nextInt(100);
- System.out.println("Component " + ID + " generates: " + array[ID]);
- // 在这里等待Barrier处
- System.out.println("Component " + ID + " sleep");
- barrier.await();
- System.out.println("Component " + ID + " awaked");
- // 计算数据数组中的当前值和后续值
- int result = array[ID] + array[ID + 1];
- System.out.println("Component " + ID + " result: " + result);
- } catch (Exception ex) {
- }
- }
- }
- /** *//**
- * 测试CyclicBarrier的用法
- */
- public static void testCyclicBarrier() {
- final int[] array = new int[3];
- CyclicBarrier barrier = new CyclicBarrier(2, new Runnable() {
- // 在所有线程都到达Barrier时执行
- public void run() {
- System.out.println("testCyclicBarrier run");
- array[2] = array[0] + array[1];
- }
- });
- // 启动线程
- new Thread(new ComponentThread(barrier, array, 0)).start();
- new Thread(new ComponentThread(barrier, array, 1)).start();
- }
- public static void main(String[] args) {
- CyclicBarrierTest.testCyclicBarrier();
- }
- }
说明:在main中执行testCyclicBarrier方法
执行到CyclicBarrier barrier = new CyclicBarrier(2, new Runnable()...)时
Runnable的参数是在CyclicBarrier的数目达到2时并且所有被CyclicBarrier.await()进入等待的线程被唤醒前执行。
所以继续执行下面的两个线程
new Thread(new ComponentThread(barrier, array, 0)).start();
new Thread(new ComponentThread(barrier, array, 1)).start();
执行public void run()方法,分别执行,互不影响
执行到barrier.await();时该线程进入等待状态,当两个线程都执行完barrier.await();时,进入到new CyclicBarrier(2, new Runnable()...)里面的方法, 执行完里面的方法后,等待的两个线程再次被唤醒,继续各自执行线程后面的语句。
相关推荐
`ThreadDemo`可能是一个简单的示例程序,它演示了如何使用`CyclicBarrier`来控制多个线程的同步行为。通常,这样的示例会创建多个线程,每个线程执行一些任务,然后在`CyclicBarrier`上等待,直到所有线程都完成任务...
《JAVA CyclicBarrier类详解》 CyclicBarrier是Java并发包(java.util.concurrent)中一个重要的同步辅助类,它的主要作用在于协调多个线程之间的协作,使得这些线程能够一起到达一个公共的“集结点”(称为屏障点...
Java并发编程(CyclicBarrier)实例详解 Java并发编程(CyclicBarrier)实例详解主要介绍了Java并发编程(CyclicBarrier)实例详解的相关资料,JAVA编写并发程序的时候,我们需要仔细去思考一下并发流程的控制,...
4. CyclicBarrier 的一个重要特性是它可以循环使用。一旦所有线程完成当前轮次的同步,计数器会自动重置,允许下一轮同步。 在实际编程中,CyclicBarrier 可用于多种场景,例如多线程计算的初始化阶段,所有参与...
### CountDownLatch 和 CyclicBarrier 的运用(含AQS详解) #### CountDownLatch **定义与特点:** CountDownLatch 是 Java 并发包中的一个重要组件,它主要用于解决“一个或多个线程等待其他线程完成任务”的问题。...
Java多线程之CyclicBarrier的使用方法 Java多线程之CyclicBarrier的使用方法是Java多线程编程中的一种同步机制,用于实现多个线程之间的同步协作。CyclicBarrier是Java 5中引入的一种同步机制,用于让多个线程等待...
Java并发编程:CountDownLatch与CyclicBarrier和Semaphore的实例详解 Java并发编程是Java语言中的一种高级技术,用于处理多线程编程中的同步问题。Java 1.5中引入了几个高效的辅助类,包括CountDownLatch、...
它的核心概念是“代”,每个使用CyclicBarrier的事件都对应一个代,当所有参与线程到达barrier点时,这一代结束,然后可以开始下一轮。CyclicBarrier的`lock`字段用于保护屏障的入口,`trip`条件变量用于线程在...
Java中将异步调用转换为同步调用有多种方法,本文将详细介绍五种方法:使用wait和notify方法、使用条件锁、使用Future、使用CountDownLatch、使用CyclicBarrier。 1. 使用wait和notify方法 wait和notify方法是...
- `CyclicBarrier`:回环栅栏,允许一组线程等待其他线程到达某个点后再继续执行。 - `Semaphore`:信号量,控制同时访问特定资源的线程数量。 - `Phaser`:更为灵活的同步器,可以注册线程并等待特定阶段。 5. ...
以上是对"Java多线程详解"主题的详细阐述,涵盖了Java多线程的基本概念、实现方式、线程控制、线程池、并发集合、线程间通信以及并发编程中常见的问题和解决方案。学习和熟练掌握这些内容对于开发高效的多线程Java...
并发工具类CyclicBarrier 详解.mp4 并发工具类Semaphore详解.mp4 并发工具类Exchanger详解.mp4 CountDownLatch,CyclicBarrier,Semaphore源码解析.mp4 提前完成任务之FutureTask使用.mp4 Future设计模式实现(实现...
理解并发容器如ConcurrentHashMap、CopyOnWriteArrayList的工作原理,以及如何使用CountDownLatch、CyclicBarrier等工具,可以有效避免这类问题。 5. **资源管理**:在处理I/O流或其他资源时,忘记关闭可能会导致...
Java多线程详解 在Java编程中,多线程是一种重要的技术,它使得程序能够同时执行多个任务,提高系统的效率和响应性。本教程将详细讲解Java中的多线程概念,包括线程的创建、状态、同步以及高级主题,旨在帮助初学者...
在Java多线程编程中,CyclicBarrier、Callable、Future和FutureTask是四个重要的组件,它们各自提供了不同的功能,帮助开发者更好地管理和协调并发任务。接下来,我们将深入探讨这些组件的特性和使用方法。 首先,...
内容包括 01-并发编程之深入理解JMM&并发三大特性(一)-fox 02-并发编程之深入理解JMM&并发三...11-深入理解AQS之CyclicBarrier&ReentrantReadWriteLock详解-fox 12-深入理解AQS之ReentrantReadWriteLock详解-fox ...
本文将详细介绍 Java 并发工具类的四大类:CountDownLatch、Semaphore、CyclicBarrier 和 Phaser,及其应用场景和使用方法。 CountDownLatch CountDownLatch 是一个同步的辅助类,允许一个或多个线程,等待其他一...
并发编程也是Java的一大特色,资料可能会包含线程同步、并发工具类如Semaphore、CountDownLatch、CyclicBarrier的使用,以及ExecutorService和Future接口的理解。这有助于学习者在多核处理器环境下编写高性能的应用...
Java多线程设计模式是Java...通过阅读“java多线程设计模式详解”文档和分析源码,你将掌握如何在Java项目中高效地使用多线程,解决并发编程中的各种问题,提升程序的性能和稳定性。这是一份值得深入研究的宝贵资料。