首页 > 代码库 > 秒杀多线程之CyclicBarrier
秒杀多线程之CyclicBarrier
CyclicBarrier是用来一个关卡来阻挡住所有线程,等所有线程全部执行到关卡处时,再统一执行下一步操作。
package com.multithread.cyclicbarrier;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import com.multithread.main.ExampleInterface;public class CyclicBarrierExample extends ExampleInterface { @Override public void startDemo() { System.out.println("开始线程:"+Thread.currentThread().getId()); // TODO Auto-generated method stub final CyclicBarrier barrier = new CyclicBarrier(3, new Runnable() { /* * 运行在最后一个await到达的线程,不是主线程! * */ @Override public void run() { System.out.println("所有选手ready"+"线程:"+Thread.currentThread().getId()); } }); ExecutorService executor = Executors.newFixedThreadPool(3); executor.submit(new Thread(new Runner(barrier, "1号选手"))); executor.submit(new Thread(new Runner(barrier, "2号选手"))); executor.submit(new Thread(new Runner(barrier, "3号选手"))); executor.shutdown(); }}package com.multithread.cyclicbarrier;import java.util.Random;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;public class Runner implements Runnable { // 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point) private CyclicBarrier barrier; private String name; public Runner(CyclicBarrier barrier, String name) { super(); this.barrier = barrier; this.name = name; } @Override public void run() { try { Thread.sleep(1000 * (new Random()).nextInt(8)); System.out.println(name + " 准备好了..."+"线程:"+Thread.currentThread().getId()); // barrier的await方法,在所有参与者都已经在此 barrier 上调用 await 方法之前,将一直等待。 barrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } System.out.println(name + " 起跑!"+"线程:"+Thread.currentThread().getId()); } }
运行结果:
开始线程:1
3号选手 准备好了...线程:14
1号选手 准备好了...线程:10
2号选手 准备好了...线程:12
所有选手ready线程:12
2号选手 起跑!线程:12
3号选手 起跑!线程:14
1号选手 起跑!线程:10
秒杀多线程之CyclicBarrier
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。