CyclicBarrier 例子
import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * * @author Administrator *这里的parties也是一个计数器, *例如,初始化时parties里的计数是3, *于是拥有该CyclicBarrier对象的线程当parties的计数为3时就唤醒 *,注:这里parties里的计数在运行时当调用CyclicBarrier:await()时,计数就加1,一直加到初始的值 */public class TestCyclicBar{ /** 用于提交任务的线程池*/ private final ExecutorService pool; public TestCyclicBar(){ pool=Executors.newCachedThreadPool(); } /** * 玩家类 * @author Administrator * */class Player implements Runnable{private String playNm;private final CyclicBarrier cyclicBarrier;public Player(CyclicBarrier cyclicBarrier,String playNm){this.cyclicBarrier=cyclicBarrier;this.playNm=playNm;}public void run(){try {System.out.println(playNm+" 正在玩第一关");cyclicBarrier.await();System.out.println(playNm+" 进入第二关");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }}public void service(){ CyclicBarrier cyclicBarrier = new CyclicBarrier(4, new Runnable() { public void run() { System.out.println("所有玩家进入第二关!"); }}); for (int i = 0; i < 4; i++) { Player p= new Player(cyclicBarrier,"玩家"+i); pool.submit(p); }}public static void main(String[] args) {TestCyclicBar t=new TestCyclicBar();t.service();}}