线程同步工具类——CyclicBarrier
2012-05-08 14:58
225 查看
CyclicBarrier一个同步辅助类。
它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。
CyclicBarrier 支持一个可选的
对于失败的同步尝试,CyclicBarrier 使用了一种要么全部要么全不 (all-or-none) 的破坏模式:如果因为中断、失败或者超时等原因,导致线程过早地离开了屏障点,那么在该屏障点等待的其他所有线程也将通过
内存一致性效果:线程中调用
例子:
它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。
CyclicBarrier 支持一个可选的
Runnable命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态,此屏障操作 很有用。
对于失败的同步尝试,CyclicBarrier 使用了一种要么全部要么全不 (all-or-none) 的破坏模式:如果因为中断、失败或者超时等原因,导致线程过早地离开了屏障点,那么在该屏障点等待的其他所有线程也将通过
BrokenBarrierException(如果它们几乎同时被中断,则用
InterruptedException)以反常的方式离开。
内存一致性效果:线程中调用
await()之前的操作 happen-before 那些是屏障操作的一部份的操作,后者依次happen-before 紧跟在从另一个线程中对应
await()成功返回的操作。
例子:
package com.study.communication; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * * @author 我夕 * */ public class CyclicBarrierTest { public static void main(String[] args) { ExecutorService service = Executors.newCachedThreadPool(); final CyclicBarrier cb = new CyclicBarrier(3); for(int i=0;i<3;i++){ Runnable runnable = new Runnable(){ public void run(){ try { Thread.sleep((long)(Math.random()*10000)); System.out.println("线程" + Thread.currentThread().getName() + "即将到达集合地点1,当前已有" + cb.getNumberWaiting() + "个已经到达,正在等候"); cb.await(); Thread.sleep((long)(Math.random()*10000)); System.out.println("线程" + Thread.currentThread().getName() + "即将到达集合地点2,当前已有" + cb.getNumberWaiting() + "个已经到达,正在等候"); cb.await(); Thread.sleep((long)(Math.random()*10000)); System.out.println("线程" + Thread.currentThread().getName() + "即将到达集合地点3,当前已有" + cb.getNumberWaiting() + "个已经到达,正在等候"); cb.await(); } catch (Exception e) { e.printStackTrace(); } } }; service.execute(runnable); } service.shutdown(); } }
相关文章推荐
- 【死磕Java并发】—- J.U.C之并发工具类:CyclicBarrier
- 线程同步工具类
- 【死磕Java并发】—- J.U.C之并发工具类:CyclicBarrier
- 第三章 Thread Synchronization Utilities(线程同步工具类)【上】
- Java八个并发学习——线程同步工具CyclicBarrier
- 【死磕Java并发】—- J.U.C之并发工具类:CyclicBarrier
- ConCurrent包下工具类-CyclicBarrier
- 【死磕Java并发】—- J.U.C之并发工具类:CyclicBarrier
- 【死磕Java并发】—- J.U.C之并发工具类:CyclicBarrier
- 线程同步工具类
- 【死磕Java并发】—- J.U.C之并发工具类:CyclicBarrier
- 线程同步工具类之栅栏
- 线程同步工具类——CountDownLatch
- 【死磕Java并发】—- J.U.C之并发工具类:CyclicBarrier
- 线程同步工具类之信号量(Semaphore)
- java Collections工具类的 一些功能(查找,最值,乱序,逆序,排序,交换,替换,让集合线程同步)
- 【死磕Java并发】—- J.U.C之并发工具类:CyclicBarrier
- j.u.c系列(09)---之并发工具类:CyclicBarrier
- Java核心知识点学习----线程同步工具类,CyclicBarrier学习
- 第三章 Thread Synchronization Utilities(线程同步工具类)【下】