wordpress个人版/seo研究协会网是干什么的
CountDownLatch是一种java.util.concurrent包下一个同步工具类。它可以让≥1个线程等待一组其它线程的操作执行完成。
【翻译】CountDown是倒计时,Latch是门闩。
1、CountDownLatch end = new CountDownLatch(N); // 新建倒计时锁,容量是N
2、end.await() // 阻塞线程。直到调用N次end.countDown() 方法才释放线程
3、end.countDown() // 倒数1个数。(计算调用次数是所有线程调用次数的总和)
import java.util.concurrent.CountDownLatch;public class Test {// 模拟了100米赛跑,10名选手已经准备就绪,只等裁判一声令下。当所有人都到达终点时,比赛结束。public static void main(String[] args) throws InterruptedException {// 开始的倒数锁final CountDownLatch begin = new CountDownLatch(1);// 结束的倒数锁final CountDownLatch end = new CountDownLatch(10);for (int index = 0; index < 10; index++) {final int NO = index + 1;Runnable run = new Runnable() {public void run() {try {// 如果当前计数为零,则此方法立即返回。begin.await();// 等待begin的信号Thread.sleep((long) (Math.random() * 10000));System.out.println("No." + NO + " arrived");} catch (InterruptedException ignored) {} finally {end.countDown(); // 每个选手到达终点时,end就减一}}};new Thread(run).start();}System.out.println("Game Start");begin.countDown(); // begin减一,开始游戏end.await(); // 等待end变为0,即所有选手到达终点System.out.println("Game Over");}
}
运行结果
Game Start
No.7 arrived
No.2 arrived
No.8 arrived
No.1 arrived
No.3 arrived
No.5 arrived
No.9 arrived
No.6 arrived
No.10 arrived
No.4 arrived
Game Over
Ref.
CountDownLatch 使用说明 - 猫咪大王 - 博客园
CountDownLatch的介绍和使用 | itzhai