11____java线程同步工具类之障碍器(CyclicBarrier)
2014-03-12 22:45
579 查看
CyclicBarrier与Semaphore一样,都是java5的并发库中的。
障碍器(CyclicBarrier)具体实现了什么功能呢?举个例子比如说公司接到一个项目(主线程),一部分人开发前台(线程1),一部分人开发后台(线程2),前台和后台不可能同时开发完成,但是只有前台和后台都开发完成了,才能提交给客户。那么,CyclicBarrier所实现的就是对已完成任务的线程进行阻塞的功能。
例子:
前台正在开发!
后台正在开发!
前台开发完成
后台开发完成
两个项目组都已开发完成,进行测试。
测试通过,交付给客户
注意:子线程内所有的运行代码都应该写在通知障碍器之前,否则一旦接到两个线程的完成的通知,指定的运行完成后的程序即开始运行,不再等待子线程.await()方法后的代码。
由此看来,synchroized、Lock、Semaphroe都是对线程运行开始进行控制,而CyclicBarrier是对线程的完成进行控制。
障碍器(CyclicBarrier)具体实现了什么功能呢?举个例子比如说公司接到一个项目(主线程),一部分人开发前台(线程1),一部分人开发后台(线程2),前台和后台不可能同时开发完成,但是只有前台和后台都开发完成了,才能提交给客户。那么,CyclicBarrier所实现的就是对已完成任务的线程进行阻塞的功能。
例子:
public class CyclicBarrierTest { public static void main(String[] args) { CyclicBarrier cb = new CyclicBarrier(2, new Runnable() { public void run() { System.out.println("两个项目组都已开发完成,进行测试。"); try { Thread.sleep((long)Math.random()*1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("测试通过,交付给客户"); } }); new Thread(new Development("前台",cb)).start(); new Thread(new Development("后台", cb)).start(); } } class Development implements Runnable{ private String name; private CyclicBarrier cyclicBarrier; public Development(String name,CyclicBarrier cyclicBarrier) { this.name = name; this.cyclicBarrier = cyclicBarrier; } public void run() { System.out.println(name+"正在开发!"); try { Thread.sleep((long)Math.random()*1000); } catch (InterruptedException e) { e.printStackTrace(); } try { System.out.println(name+"开发完成"); //通知障碍器已经完成 cyclicBarrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } } }运行结果:
前台正在开发!
后台正在开发!
前台开发完成
后台开发完成
两个项目组都已开发完成,进行测试。
测试通过,交付给客户
注意:子线程内所有的运行代码都应该写在通知障碍器之前,否则一旦接到两个线程的完成的通知,指定的运行完成后的程序即开始运行,不再等待子线程.await()方法后的代码。
由此看来,synchroized、Lock、Semaphroe都是对线程运行开始进行控制,而CyclicBarrier是对线程的完成进行控制。
相关文章推荐
- Java多线程之同步工具类(CountDownLatch、CyclicBarrier、Semaphore)
- JAVA线程同步辅助类CyclicBarrier循环屏障
- Java并发同步工具类之CyclicBarrier
- Java并发之CyclicBarrier 可重用同步工具类
- Java线程知识__其他几种线程同步的工具类的使用(CyclicBarrier,CountDownLatch,Exchanger)
- Java多线程-并发工具类(一)同步屏障CyclicBarrier
- Java并发编程之2——同步工具类的使用(CountDownLatch,CyclicBarrier,BlockungQueue,Semaphore)
- Java5 多线程(五)--CyclicBarrier同步的工具类
- Java并发:同步工具类详解(CountDownLatch、CyclicBarrier、Semaphore)
- Java5 多线程(五)--CyclicBarrier同步的工具类
- (11)java5的Semaphere、CyclicBarrier同步工具
- java.util.concurrent.CyclicBarrier同步屏障工具类源码解析
- Java同步工具类——栅栏[CyclicBarrier]
- Java5 多线程(五)--CyclicBarrier同步的工具类
- Java并发工具类(二):同步屏障CyclicBarrier
- 同步工具类:CountDownLatch、CyclicBarrier和Semaphore
- Java 编程下 CyclicBarrier 中的线程等待
- java并发之同步工具类三之栅栏Barrier
- Java高并发程序-Chapter3 JDK并发包(第十五讲)同步控制之CyclicBarrier 循环栅栏
- 【死磕Java并发】—- J.U.C之并发工具类:CyclicBarrier