资源描述:
《java并发编程(22):并发新特性—障碍器cyclicbarrier(含代码)-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、hva并发编程(22):并发新特性—障碍器CyclicBarricr(含代码)-编程开发技术Java并发编程(22):并发新特性一障碍器Cyc1icBarrier(含代码)原文出处:兰亭风雨CyclicBarrier(又叫障碍器)同样是Java5+加入的新特性,使用时需要导入java.util,concurrent.C)4icBarrier0它适用于这样一种情况:你希望创建一组任务,它们并发地执行工作,另外的一个任务在这一组任务并发执行结朿前一直阻塞等待,直到该组任务全部执行结束,这个任务才得以执行。这非常像CountDownLatch,只是CountDown
2、Latch是只触发一次的事件,而CyclicBarricr可以多次重用。下面给出一个简单的实例來说明其用法:importjava.util,concurrent.BrokenBarrierException;importjava・uti1.concurrent.CyclicBarricr;publicclassCyc1icBarrierTest{publicstaticvoidmain(String[]args){//创建CyclicBarrier对象,〃并设置执行完一组5个线程的并发任务后,再执行MainTask任务CyclicBarriercb=newCy
3、clicBarrier(5,newMainTaskO);cb).start();cb).start();cb).start();cb).start();cb).start();newSubTask(〃A〃,newSubTasknewSubTask(,ZC/Z,newSubTask(〃D〃,newSubTask(,ZEZ,,/***最后执行的任务*/classMainTaskimplementsRunnable{publicvoidrun(){System,out.printlnC终于要执行最后的任务T……〃);}/***一组并发任务*/classSubTask
4、cxtcndsThread{privateStringname;privateCyclicBarriercb;SubTask(Stringname,CyclicBarriercb){this.name二name;this・cb=cb;publicvoidrun(){System,out.println(〃[并发任务〃+name+“]开始执行〃);for(inti=0;i<999999;i++);//模拟耗时的任务System,out.printin(,z[并发任务〃+name+“]开始执行完毕,通知障碍器〃);try{〃每执行完一项任务就通知障碍器cb.awa
5、it();}catch(InterruptedExceptione){e.printStackTrace();}catch(BrokenBarrierExceptione){e.printStackTrace();某次执行的结果如下:[并发任务A][并发任务B][并发任务D][并发任务E]?开始执行?开始执行?开始执行?开始执行[并发任务A]?开始执行完毕,[并发任务E]?开始执行完毕,通知障碍器通知障碍器[并发任务D]?开始执行完毕,通知障碍器[并发任务C]?开始执行[并发任务引?开始执行完毕,[并发任务C]?开始执行完毕,通知障碍器通知障碍器终于要执行最后
6、的任务了从结果可以看出:MdinTeisk任务在一组中的5个任务执行完后才开始执行。本系列:Java并发编程(1)Java并发编程(2)Java并发编程(3)Java并发编程(4)Java并发编程(5)Java并发编程(6)Java并发编程(7)Java并发编程(8)Java并发编程(9)Java并发编程(12):Java并发编程(13):町重入内置锁线程中断(含代码)线程挂起、恢复与终止的正确方法(含代码)守护线程与线程阻塞的四种情况volatile变最修饰符一意料之外的问题(含代码)Runnable和Thread实现多线程的区别(含代码)使用synchro
7、nized获取互斥锁的几点说明多线程环境中安全使用集合API(含代码)死锁(含代码)Java并发编程(10):使用wait/notify/notifyAll实现线程间通信的几点重要说明Java并发编程(11):线程间通信中notify通知的遗漏(含代码)线程间通信中notifyAll造成的早期通知问题(含代码)纶产者一消费者模型(含代码)Java并发编程(14):图文讲述同步的另一个重要功能一内存可见性Java并发编程(15):并发编程屮实现内存可见的两种方法比较一加锁和volatile变Java并发编程(16):深入Java内存模型一happen-befor
8、e规则及其对DCL的分析(含代码)Ja