Java中CountDownLatch使用初步
package gj.lang.util.concurrent.countdonwlatch;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
/**
* Author: areful
* Date: 2019/4/24
*/
public class CountDownLatchSample {
private static class Player implements Runnable {
private int id;
private CountDownLatch beginCountDownLatch;
private CountDownLatch endCountDownLatch;
private Player(int id, CountDownLatch begin, CountDownLatch end) {
this.id = id;
this.beginCountDownLatch = begin;
this.endCountDownLatch = end;
}
@Override
public void run() {
try {
beginCountDownLatch.await();
System.out.println("CyclicBarrierSample " + id + "起跑...");
Thread.sleep(new Random().nextInt(1000));
System.out.println("CyclicBarrierSample " + id + " 到达终点");
endCountDownLatch.countDown();
System.out.println("CyclicBarrierSample " + id + "继续干其他事情");
} catch (InterruptedException ignored) {
}
}
}
public static void main(String[] args) {
final int PLAYER_NUM = 5;
CountDownLatch beginCountDownLatch = new CountDownLatch(1);
CountDownLatch endCountDownLatch = new CountDownLatch(PLAYER_NUM);
for (int i = 0; i < PLAYER_NUM; i++) {
new Thread(new Player(i, beginCountDownLatch, endCountDownLatch)).start();
}
try {
System.out.println("统一起跑");
beginCountDownLatch.countDown();
endCountDownLatch.await(); //等待所有运动员到达终点
System.out.println("结果发送到汇报成绩的系统");
} catch (InterruptedException ignored) {
}
}
}
输出结果:

浙公网安备 33010602011771号