Java并发同步工具类之CyclicBarrier
2016-02-23 20:01
661 查看
CyclicBarrier循环栅栏,允许多个线程相互等待,直到到达一个共同的障碍点。非常适用的场景是一定数量的线程之间需要相互等待彼此。CyclicBarrier因为有Cyclic,所以可以循环使用。
class CyclicBarrierTest { private static Logger logger = LoggerFactory.getLogger(CyclicBarrierTest.class); public static void main(String[] args) { CyclicBarrier cyclicBarrier = new CyclicBarrier(3); System.out.println("cyclicBarrierTest begin..."); new Runner(cyclicBarrier,"zs").start(); // 启动三个子线程 new Runner(cyclicBarrier,"ls").start(); new Runner(cyclicBarrier,"ww").start(); System.out.println("cyclicBarrierTest end ...."); //主线程不会阻塞,所以启动子线程之后,这里会马上执行 } static class Runner extends Thread{ private CyclicBarrier cyclicBarrier ; private String name; public Runner(CyclicBarrier cyclicBarrier,String name){ this.cyclicBarrier = cyclicBarrier; this.name = name; } @Override public void run(){ try { Thread.currentThread().sleep(1000); System.out.println(name+": is ready...."); cyclicBarrier.await(); // 三个子线程会在这里进行第一步的等待 (与主线程无关)当三个子线程都执行完成之后,会同时进行下一步的工作 Thread.currentThread().sleep(1000); System.out.println(name+": is running..."); cyclicBarrier.await(); // 三个子线程会在这里进行第二步的等待(与主线程无关)当三个子线程都执行完成之后,会同时进入下一步的操作 Thread.currentThread().sleep(1000); System.out.println(name+": is complete..."); //执行完成之后,子线程退出 }catch (Exception e){ logger.error("Runner run method cause exception : ",e); } } } }
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- 使用 Syncthing 在多个设备间同步文件
- C#实现多线程的同步方法实例分析
- 浅谈chuck-lua中的多线程
- 科学知识:同步、异步、阻塞和非阻塞区别
- 同步文件备份工具 Super Flexible File Synchronizer Pro v4
- 探讨Ajax中同步与异步之间的区别
- C#简单多线程同步和优先权用法实例
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- C#线程同步的三类情景分析
- C#多线程学习之(六)互斥对象用法实例
- 基于一个应用程序多线程误用的分析详解
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析
- C#多线程之Thread中Thread.IsAlive属性用法分析
- 分享我在工作中遇到的多线程下导致RCW无法释放的问题
- C#多线程编程之使用ReaderWriterLock类实现多用户读与单用户写同步的方法
- C#控制台下测试多线程的方法
- rsync命令使用总结