多线程之赛跑-CountDownLatch
CountDownLatch
等所有的线程准备好之后发起执行后续流程.
代码如下:
/**
* @author jeremy.li
* @date 2020/11/30
* @description
*/
public class CountDownLatchTest implements Runnable {
static CountDownLatch countDownLatch = new CountDownLatch(5);
@Override
public void run() {
try {
Thread.sleep(new Random().nextInt(9)*1000);
System.out.println(Thread.currentThread().getName() + ",已准备就绪");
countDownLatch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws InterruptedException {
for (int i = 1; i < 6; i++) {
CountDownLatchTest countDownLatchTest = new CountDownLatchTest();
Thread thread = new Thread(countDownLatchTest, i + " 号运动员");
thread.start();
}
countDownLatch.await();
System.out.println("----开跑----");
}
}
关键方法:
await();
阻塞当前线程
countDown();
计数器-1,
描述:
await方法在主线程中执行,阻塞主线程,countDown在子线程中执行,将创建CountDownLatch时初始化计数器-1,当计数器=0时。主线程阻塞取消。

浙公网安备 33010602011771号