package concurrent.cyclicBarrier;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 设置线程路障
* await方法可以阻挡所有线程通过,当到达路障的线程数量为构造方法初始值时,就会放行
*
*/
public class CyclicBarrierTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final CyclicBarrier cb = new CyclicBarrier(3);
for(int i=0;i<3;i++){
Runnable runnable = new Runnable(){
public void run(){
try {
Thread.sleep((long)(Math.random()*10000));
System.out.println("线程" + Thread.currentThread().getName() +
"即将到达集合地点1,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));
cb.await();
Thread.sleep((long)(Math.random()*10000));
System.out.println("线程" + Thread.currentThread().getName() +
"即将到达集合地点2,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));
cb.await();
Thread.sleep((long)(Math.random()*10000));
System.out.println("线程" + Thread.currentThread().getName() +
"即将到达集合地点3,当前已有" + (cb.getNumberWaiting() + 1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));
cb.await();
} catch (Exception e) {
e.printStackTrace();
}
}
};
service.execute(runnable);
}
service.shutdown();
}
}
分享到:
相关推荐
在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具类,它们用于协调多个线程间的协作。这两个工具都是在`java.util.concurrent`包下,是Java并发库的重要组成部分。 **CountDownLatch** ...
Java并发编程(CyclicBarrier)实例详解 Java并发编程(CyclicBarrier)实例详解主要介绍了Java并发编程(CyclicBarrier)实例详解的相关资料,JAVA编写并发程序的时候,我们需要仔细去思考一下并发流程的控制,...
Java并发编程中的栅栏(CyclicBarrier)是一个同步辅助类,它允许一组线程等待彼此到达某个特定点,然后一起继续执行。这个特定点被称为屏障点。与闭锁(CountDownLatch)不同,闭锁通常是一次性的,而CyclicBarrier...
在Java多线程编程中,`CyclicBarrier`是一个非常重要的同步工具类,它允许一组线程等待其他线程到达某个屏障点后再一起继续执行。这个屏障点就是我们所说的“循环栅栏”,顾名思义,它就像一个旋转门,所有线程必须...
Java并发实例之CyclicBarrier的使用 CyclicBarrier是Java中的一种多线程并发控制实用工具,和CountDownLatch非常类似,它也可以实现线程间的计数等待,但是它的功能比CountDownLatch更加复杂且强大。CyclicBarrier...
CyclicBarrier的使用以及注意事项
在创建CyclicBarrier实例时,可以传递一个参数,该参数是参与屏障同步的线程数量。当最后一个线程调用await()方法时,CyclicBarrier会自动将所有线程释放,或者可以指定一个可选的Runnable命令,在所有线程到达屏障...
解决办法是在创建CyclicBarrier实例时,确保指定的屏障大小与实际参与线程数量完全匹配。 2. 异常未正确恢复:当线程在屏障点等待过程中抛出异常,尤其是抛出了BrokenBarrierException异常,会使得CyclicBarrier...
它不支持重置屏障,如果需要重用屏障,所有等待的线程都必须在调用`await()`之后重新创建CyclicBarrier实例。如果在使用中出现这种情况,可能需要考虑其他并发工具。 一个可能的替代方案是`CountDownLatch`。`...
此外,还可以传递一个可选的Runnable实例barrierAction,当所有线程都到达屏障点时,这个Runnable会被执行,通常用于执行一些聚合操作。 3. **主要方法**: - `await()`:此方法使当前线程进入等待状态,直到所有...
在所有线程都通过同步点后,屏障点可以自动重置,使得CyclicBarrier可以循环使用,而无需创建新的实例。这使得CyclicBarrier在某些重复执行相同任务的场景中特别有用,比如在测试过程中模拟多线程环境。 ...
Java中的`CyclicBarrier`是用于多线程同步的一个强大工具,主要应用于一组线程需要在继续执行之前等待其他线程到达某个特定点的情况。它允许开发者定义一个屏障点,只有当所有参与的线程都到达这个屏障点时,它们才...
Java并发系列之CyclicBarrier源码分析 CyclicBarrier是Java并发系列中的一种同步工具类,用于实现一组线程相互等待。当所有线程都到达某个屏障点后,再进行后续的操作。下面是对CyclicBarrier源码的详细分析。 ...
用CyclicBarrier,reentrantlock,condition来完成同时购买,同步购买的功能 JUC系列之模拟抢票(N人同时抢票,票不足系统补仓,N-M人继续抢票) http://blog.csdn.net/crazyzxljing0621/article/details/77891620
在上述的测试代码中,我们创建了一个`CyclicBarrier`实例,设置了线程数为5,这意味着我们需要5个线程都调用`await()`方法后,屏障才会打开。每个`WorkerThread`在运行时会打印"Worker's waiting",然后调用`barrier...
要使用`CyclicBarrier`,首先需要创建一个实例对象。在构造函数中,我们需要指定参与线程的数量以及当所有线程都到达屏障点时所要执行的操作(如果有的话)。这是一个典型的使用示例: ```java import java.util....
15. **并发编程**:Java提供了丰富的并发工具类,如CountDownLatch、CyclicBarrier、Semaphore等,实例将展示如何高效地管理并发任务。 通过逐一研究这些源码实例,不仅可以加深对Java语言的理解,还能提升实际编程...
10. **并发工具**:如CountDownLatch、CyclicBarrier、Semaphore等,这些工具可以帮助构建复杂的并发程序,实例可能展示如何有效使用它们。 11. **Java 8及以后的新特性**:如Lambda表达式、Stream API、Optional类...
Java多线程之CyclicBarrier的使用方法 Java多线程之CyclicBarrier的使用方法是Java多线程编程中的一种同步机制,用于实现多个线程之间的同步协作。CyclicBarrier是Java 5中引入的一种同步机制,用于让多个线程等待...