package component;
import java.util.Random;
import java.util.concurrent.CyclicBarrier;
/**
* 1.CyclicBarrier类似于CountDownLatch也是个计数器,<br>
* 2.不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数,
* 3.当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续。
* 4.CyclicBarrier就象它名字的意思一样,可看成是个障碍,
* 5.所有的线程必须到齐后才能一起通过这个障碍。
* 6.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();
}
}
运行结果如下:
Component 0 generates: 32
Component 0 sleep...
Component 1 generates: 15
Component 1 sleep...
testCyclicBarrier run...
Component 1 awaked...
Component 1 result: 62
Component 0 awaked...
Component 0 result: 47
分享到:
相关推荐
它提供了与Java 5及更高版本相同的并发工具类,如线程池、Future、CyclicBarrier等。这些工具可以提高多线程应用程序的性能和可维护性,尤其是在处理大量并发任务时。如果Eclipse Axis2 Codegen插件在旧版本的JDK上...
在这个项目中,可能包含了实现并发控制策略的不同代码示例,如使用`ReentrantLock`、`Semaphore`、`CyclicBarrier`等工具,或者展示了如何使用`ExecutorService`来管理和调度线程。 总的来说,这个主题涵盖了Java...
此外,Java并发工具类还包括`CountDownLatch`(计数器门限锁)、`CyclicBarrier`(循环屏障)和`Semaphore`(信号量),它们常用于协调多个线程间的同步。 在`concurrent-master`这个压缩包中,可能包含了各种并行...
1. **Java并发API**: 这个资源可能涵盖了Java的并发库,包括`java.util.concurrent`包中的类和接口,如`ExecutorService`, `Future`, `Callable`, `ThreadLocal`, `Semaphore`, `CyclicBarrier`, `CountDownLatch`, ...
4. **CyclicBarrier**: 与CountDownLatch类似,但CyclicBarrier可以重用,当所有线程到达屏障点时,所有线程都会一起继续执行。 5. **Semaphore**: 信号量用于控制同时访问特定资源的线程数量,通过维护一个许可...
`CyclicBarrier`(循环栅栏)让一组线程等待彼此到达某个点后再继续。 在`java-concurrent-master`这个项目中,你可能会看到各种示例代码,展示如何使用上述组件来解决并发问题,例如线程池的创建和使用,线程间的...
- **CyclicBarrier**和**CountDownLatch**:协调多个线程的同步,如等待所有线程到达某个点后继续执行。 - **Semaphore**:信号量,用于限制同时访问特定资源的线程数量。 4. **并发容器** - **...
`java.util.concurrent`包还提供了许多并发工具类,如`CountDownLatch`(倒计时器)、`CyclicBarrier`(循环屏障)、`Semaphore`(信号量)和`Phaser`(可重用分阶段屏障),这些工具类可以帮助协调多个线程间的...
- **CyclicBarrier(循环栅栏)**:允许一组线程等待彼此到达一个公共屏障点,然后一起继续执行。常用于并发测试或多阶段计算。 - **CountDownLatch(倒计时 latch)**:一次性的同步工具,允许一个或多个线程等待...
2. **Executor框架**:Java 5引入了`java.util.concurrent`包,其中的`ExecutorService`接口和其实现如`ThreadPoolExecutor`,提供了更灵活的线程管理和调度方式。通过这个框架,我们可以控制线程池的大小,避免大量...
"java-concurrent"这个项目显然聚焦于Java并发编程的实践与学习,特别是通过马士兵老师的高并发视频课程的源码进行深入研究。JUC,全称Java Util Concurrency,是Java平台标准版(Java SE)的一部分,提供了丰富的...
`CyclicBarrier`是Java并发工具包(`java.util.concurrent`)中的一个强大工具。它的主要作用是在一组线程中设置一个公共的“屏障”点。所有线程都需要到达这个点后,才能一起继续执行。这意味着只有当所有参与的...
在Java的`java.util.concurrent`包中,`CyclicBarrier`提供了以下主要功能: 1. **初始化**: `CyclicBarrier`可以通过传递两个参数来创建,第一个参数是参与等待的线程数量,第二个参数是一个可选的`Runnable`动作...
- 在3.1版本中,backport-util-concurrent引入了Phaser,这是一个可重用的同步帮助器类,支持多个参与者之间的有界同步,类似于CyclicBarrier和CountDownLatch,但更灵活。Phaser可以自动调整参与者的数量,并且在...
同步工具类:concurrent包提供了一些同步工具类,如CountDownLatch、CyclicBarrier、Semaphore等,可以帮助开发者实现复杂的线程协作和同步任务。 并发集合类:concurrent包提供了一些并发集合类,如...
这两个工具都是在`java.util.concurrent`包下,是Java并发库的重要组成部分。 **CountDownLatch** CountDownLatch是一个计数器,初始化时设定一个计数值,线程在执行任务之前会调用`countDown()`方法来减小计数值,...
在Java的并发编程中,CountDownLatch和CyclicBarrier是两个非常重要的同步工具,它们用于协调多个线程的执行顺序。本文将详细介绍CountDownLatch和CyclicBarrier的工作原理、使用场景以及如何在实际项目中应用它们。...
在Java并发库中,`java.util.concurrent.CyclicBarrier`是一个同步辅助类,它允许一组线程等待彼此到达一个公共屏障点。这个屏障点在所有线程都到达之后才会被释放,从而允许所有线程继续执行。`CyclicBarrier`这个...
13. 栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool ...
5. **CyclicBarrier和Semaphore**:这两个类是同步辅助工具,CyclicBarrier用于一组线程互相等待,直到所有线程都到达屏障点后才能继续执行;Semaphore则用于限制同时访问特定资源的线程数量,常用于限流和保护共享...