CountDownLatch 是基于 AQS 实现的。当 count 减为 0 时,唤醒所有等待的线程。
使用场景:
有一个任务A,它要等待其他4个任务执行完毕之后才能执行,
此时就可以利用 CountDownLatch 来实现这种功能了。
CountDownLatch 类只提供了一个构造器:
// 参数 count 为计数值
public CountDownLatch(int count) {};
CountDownLatch 类中最重要的 3 个方法:
// 调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行
public void await() throws InterruptedException {};
// 和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行
public boolean await(long timeout, TimeUnit unit) throws InterruptedException {};
// 将count值减1
public void countDown() {};
CountDownLatch 的用法示例:
public void test() throws Exception {
final CountDownLatch latch = new CountDownLatch(2);
new Thread(() -> {
System.out.println("子线程正在执行");
System.out.println("子线程执行完毕");
latch.countDown();
}).start();
new Thread(() -> {
System.out.println("子线程正在执行");
System.out.println("子线程执行完毕");
latch.countDown();
}).start();
System.out.println("等待2个子线程执行完毕...");
latch.await();
System.out.println("2个子线程已经执行完毕");
System.out.println("继续执行主线程");
}