package endual;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* CyclicBarrier
* 表示的是大家彼此等待着,大家集合好以后才开始出发的,分散活动后有指定地点集合皮恩干嘛,这好比整个公司的人
* 利用周末去玩,每个人好比一个线程,集合的时间和地点好比是路障,只有大家都到路障这个地方了,大家猜可以一起出发
* 去游玩,只有有一个人不到这个路障,是不能进行出发的,再同时出发到公园优先,在指定的地点集合后在同时开始就餐
*/
public class CyclicBarrierApp {
public static void main(String[] args) {
final ExecutorService es = Executors.newCachedThreadPool() ; //有多少线程创建多少线程可以并发的进行执行
//约定了三个线程到了才能开始干事情
final CyclicBarrier cb = new CyclicBarrier(3) ; //设定了个数
for (int i=0; i < 3; i++) {
Runnable runn = new Runnable() {
public void run() {
try {
System.out.println();
System.out.println("我要开始做事情了,要花费一些事情哦");
System.out.println(Thread.currentThread().getName());
try {
System.out.println(Thread.currentThread().getName() + "事情还没做提示1");
cb.await() ;
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //这个是障碍,只有都到了三个线程,才能够开始执行下面的代码了
System.out.println("事情要开始做了");
System.out.println(Thread.currentThread().getName()+"88888888" ) ; //这个是大家都要做的事情
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
es.execute(runn);
}
}
}
这个cyclicBarrier的意思是 创建创建一个对象,指定了要等待线程的个数,当等待线程的满足了个数,那么各自线程就自己执行下去代码,或者就挺留在那个位子中。
本文通过一个生动的例子介绍了Java并发包中的CyclicBarrier类。它允许一组线程相互等待,直到到达某个公共屏障点,所有线程达到该点后才能继续执行。文章详细解释了CyclicBarrier的工作原理,并提供了一个具体的实现示例。
9138

被折叠的 条评论
为什么被折叠?



