读书人

并发编程1波流之CyclicBarrier

发布时间: 2013-11-09 17:06:34 作者: rapoo

并发编程一波流之CyclicBarrier
CyclicBarrier介绍
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态,此屏障操作 很有用。
主要方法:



结果:
开始计算--北京省--数据!
开始计算--上海省--数据!
北京省已经计算完成,并通知汇总Service!
开始计算--四川省--数据!
四川省已经计算完成,并通知汇总Service!
上海省已经计算完成,并通知汇总Service!
开始计算--广西省--数据!
广西省已经计算完成,并通知汇总Service!
开始计算--黑龙江省--数据!
黑龙江省已经计算完成,并通知汇总Service!
=======================================
开始全国汇总

其它业务类

/** * @author guangbo *  */public interface BillService {/** * 各省计费 *  * @param code *            省编码 */public void bill(String code);}/** * @author guangbo *  */public interface TotalService {/** * 汇总各省数据 */public void count();}


实例讲解,力求简单易懂,高效实用。欢迎拍砖,谢绝漫骂。

1 楼 sniffer123 2011-03-31 不错 以前我是一个个设标志位,每个线程执行完后更新各自的标志位,如果都齐了就执行。不过终止或者异常的处理就相当麻烦
用这玩意应该更方便些 2 楼 busiying119 2011-06-20 问下楼主,既然5个省的计算数据都是只运行一次为什么一定要用多线程呢,个人感觉除了Total 类需要定时启动数据计算用到线程外,其余省的计算不需要线程控制,如果不是线程去完成任务,那么就有好多方法去控制业务顺序了(当5个省运行完再执行总局汇总)

读书人网 >编程

热点推荐