CyclicBarrier需要每个线程都准备好后才能继续执行,否则所有线程继续等待
public class P08UseCyclicBarrier { static class Runner implements Runnable{ private CyclicBarrier barrier; private String name; public Runner(CyclicBarrier barrier,String name) { this.barrier = barrier; this.name = name; } @Override public void run() { try { Thread.sleep(1000 * (new Random()).nextInt(5)); System.out.println(name + " 准备OK"); barrier.await(); //该线程准备好了,但要阻塞,等待别的线程准备好 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (BrokenBarrierException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(name + " Go!!");//所有线程都准备好后执行 } } public static void main(String[] args) { //需要await()被调用三次,才能继续执行 CyclicBarrier barrier = new CyclicBarrier(3); new Thread(new Runner(barrier, "小明")).start(); new Thread(new Runner(barrier, "小王")).start(); new Thread(new Runner(barrier, "小李")).start(); } }
执行结果