package gj.lang.util.concurrent.cyclicbarrier;
import java.util.Random;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
/**
* Author: areful
* Date: 2019/4/24
*/
public class CyclicBarrierSample {
private static class Player implements Runnable {
private CyclicBarrier cyclicBarrier;
private int id;
private Player(int id, CyclicBarrier cyclicBarrier) {
this.id = id;
this.cyclicBarrier = cyclicBarrier;
}
@Override
public void run() {
try {
System.out.println("玩家" + id + "正在玩第一关...");
Thread.sleep(new Random().nextInt(1000));
System.out.println("玩家" + id + "进入第二关...");
cyclicBarrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
final int PLAYER_NUM = 4;
CyclicBarrier cyclicBarrier = new CyclicBarrier(PLAYER_NUM, () ->
System.out.println("所有玩家进入第二关!"));
for (int i = 0; i < PLAYER_NUM; i++) {
new Thread(new Player(i, cyclicBarrier)).start();
}
}
}
输出结果:
