package com.example.demo.multithread;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
final int NUM = 10;
CountDownLatch countDownLatcha = new CountDownLatch(NUM);
CountDownLatch countDownLatchb = new CountDownLatch(NUM);
CountDownLatch countDownLatchc = new CountDownLatch(NUM);
new Thread(() -> {
while (countDownLatcha.getCount() != 0) {
if (countDownLatcha.getCount() == countDownLatchb.getCount()
&& countDownLatcha.getCount() == countDownLatchc.getCount()) {
System.out.print("a");
countDownLatcha.countDown();
}
}
}, "t1").start();
new Thread(() -> {
while (countDownLatchb.getCount() != 0) {
if (countDownLatcha.getCount() + 1 == countDownLatchb.getCount()
&& countDownLatcha.getCount() + 1 == countDownLatchc.getCount()) {
System.out.print("b");
countDownLatchb.countDown();
}
}
}, "t2").start();
new Thread(() -> {
while (countDownLatchc.getCount() != 0) {
if (countDownLatcha.getCount() == countDownLatchb.getCount()
&& countDownLatchb.getCount() + 1 == countDownLatchc.getCount()) {
System.out.print("c" + countDownLatchc.getCount() + " ");
countDownLatchc.countDown();
}
}
}, "t3").start();
// 如果100秒后还没减到0,就继续往下执行。
if (!countDownLatcha.await(100, TimeUnit.SECONDS)) {
System.out.println("continue without waiting for countDownLatch to be zero.");
}
}
}
运行结果: