返回
CountDownLatch:实现线程安全、可靠等待任务完成的并发工具
Android
2023-10-12 19:03:33
在Java并发编程中,经常需要一个线程等待其他多个线程完成任务后,再继续执行。这时,CountDownLatch就派上用场了。CountDownLatch是一个同步工具类,它允许一个或多个线程等待其他线程完成工作后,再执行。
CountDownLatch的工作原理
CountDownLatch的原理很简单,它维护着一个计数器,初始值为线程的数量。当某个线程完成任务后,调用countDown()方法,计数器减1。当计数器变为0时,等待的线程被唤醒,继续执行。
CountDownLatch的应用场景
CountDownLatch的应用场景非常广泛,包括:
- 启动一个框架或系统时,需要等待所有组件初始化完成后,再启动主程序。
- 多个线程同时处理一个任务,需要等待所有线程都完成任务后,再继续执行。
- 多个线程同时访问一个资源,需要等待所有线程都释放资源后,再允许其他线程访问。
CountDownLatch的用法
CountDownLatch的用法也非常简单,只需以下三个步骤:
- 创建一个CountDownLatch对象,并指定计数器的初始值。
- 当某个线程完成任务后,调用countDown()方法,计数器减1。
- 当计数器变为0时,等待的线程被唤醒,继续执行。
CountDownLatch的示例代码
下面是一个使用CountDownLatch的示例代码:
import java.util.concurrent.CountDownLatch;
public class CountDownLatchExample {
public static void main(String[] args) {
// 创建一个CountDownLatch对象,并指定计数器的初始值为3
CountDownLatch latch = new CountDownLatch(3);
// 启动三个线程,每个线程都执行一个任务
for (int i = 0; i < 3; i++) {
new Thread(() -> {
// 执行任务
System.out.println("线程" + Thread.currentThread().getName() + "正在执行任务");
// 调用countDown()方法,计数器减1
latch.countDown();
}).start();
}
// 等待所有线程完成任务
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 所有线程都完成任务后,继续执行
System.out.println("所有线程都完成任务了");
}
}
总结
CountDownLatch是一个非常有用的并发工具,它可以帮助我们实现线程安全、可靠地等待任务完成。在实际开发中,CountDownLatch的应用场景非常广泛,包括启动框架或系统、多个线程同时处理任务、多个线程同时访问资源等。掌握CountDownLatch的使用方法,可以大大提高开发效率。