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();
}
}
執行結果