多线程编程入门(16):线程同步工具之CyclicBarrier

来源:互联网 发布:centos 7.0安装教程 编辑:程序博客网 时间:2024/06/07 15:07
package cn.itcast.heima2;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class CyclicBarrierTest {public static void main(String[] args) {ExecutorService service = Executors.newCachedThreadPool();final CyclicBarrier cyclicBarrier = new CyclicBarrier(3);for (int i = 0; i < 3; i++) {Runnable runnable = new Runnable() {@Overridepublic void run() {try {Thread.sleep((long) (Math.random() * 10000));System.out.println("线程"+ Thread.currentThread().getName()+ "即将到达集合地点1,当前已有"+ (cyclicBarrier.getNumberWaiting() + 1)+ (cyclicBarrier.getNumberWaiting() == 2 ? "都到齐了,继续走呀": "正在等候"));cyclicBarrier.await();Thread.sleep((long) (Math.random() * 10000));System.out.println("线程"+ Thread.currentThread().getName()+ "即将到达集合地点2,当前已有"+ (cyclicBarrier.getNumberWaiting() + 1)+ (cyclicBarrier.getNumberWaiting() == 2 ? "都到齐了,继续走呀": "正在等候"));cyclicBarrier.await();Thread.sleep((long) (Math.random() * 10000));System.out.println("线程"+ Thread.currentThread().getName()+ "即将到达集合地点3,当前已有"+ (cyclicBarrier.getNumberWaiting() + 1)+ (cyclicBarrier.getNumberWaiting() == 2 ? "都到齐了,继续走呀": "正在等候"));cyclicBarrier.await();} catch (Exception e) {e.printStackTrace();}}};service.execute(runnable);}service.shutdown();}}

参考链接

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html

0 0
原创粉丝点击