首页 > 代码库 > Java并发学习之十八——线程同步工具之CyclicBarrier
Java并发学习之十八——线程同步工具之CyclicBarrier
本文是学习网络上的文章时的总结,感谢大家无私的分享。
CyclicBarrier 类有一个整数初始值,此值表示将在同一点同步的线程数量。当其中一个线程到达确定点,它会调用await() 方法来等待其他线程。当线程调用这个方法,CyclicBarrier阻塞线程进入休眠直到其他线程到达。当最后一个线程调用CyclicBarrier 类的await() 方法,它唤醒所有等待的线程并继续执行它们的任务。
注意比较CountDownLatch和CyclicBarrier:
1.CountDownLatch的作用是允许1或N个线程等待其他线程完成执行;而CyclicBarrier则是允许N个线程相互等待。
2.CountDownLatch的计数器无法被重置;CyclicBarrier的计数器可以被重置后使用,因此它被称为是循环的barrier。
package chapter3; import java.util.concurrent.CyclicBarrier; public class TestCyclicBarrier { private static final int THREAD_NUM = 5; public static class WorkerThread implements Runnable{ CyclicBarrier barrier; public WorkerThread(CyclicBarrier b){ this.barrier = b; } @Override public void run() { // TODO Auto-generated method stub try{ System.out.println("ID:"+Thread.currentThread().getId()+"Worker's waiting"); //线程在这里等待,直到所有线程都到达barrier。 barrier.await(); System.out.println("ID:"+Thread.currentThread().getId()+" Working"); }catch(Exception e){ e.printStackTrace(); } } } /** * * <p> * </p> * @author zhangjunshuai * @date 2014-9-29 上午11:27:36 * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub CyclicBarrier cb = new CyclicBarrier(THREAD_NUM, new Runnable() { //当所有线程到达barrier时执行 @Override public void run() { // TODO Auto-generated method stub System.out.println("Inside Barrier"); } }); for(int i=0;i<THREAD_NUM;i++){ new Thread(new WorkerThread(cb)).start(); } } }
Java并发学习之十八——线程同步工具之CyclicBarrier
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。