请解释Java中的CountDownLatch是什么,包括它的主要用途和基本工作方式。
考察说明
考查对Java并发工具CountDownLatch的理解和应用场景。
回答思路
- 【回答框架 1】CountDownLatch是Java并发包java.util.concurrent中的一个同步辅助类,用于让一个或多个线程等待其他线程完成一组操作。它通过一个计数器实现,初始化时设定计数值,调用await()的线程会阻塞直到计数值减到零。
- 【回答框架 2】主要方法包括countDown()和await()。每次调用countDown()会使计数器减一,当计数器归零时,所有等待的线程被释放。await()可带超时时间,避免无限等待。
- 【回答框架 3】典型应用场景包括:主线程等待多个子线程完成后再继续执行,或者模拟并发,让多个线程同时开始执行。例如,使用两个CountDownLatch实现所有子线程同时启动和主线程等待所有子线程结束。
- 【回答框架 4】与CyclicBarrier的区别在于,CountDownLatch是一次性的,计数归零后不能重置;而CyclicBarrier可循环使用,并且允许所有线程相互等待。
- 【关键点 1】CountDownLatch通过计数器实现线程等待,计数归零后释放所有等待线程。
- 【关键点 2】常用方法countDown()和await(),await()可设置超时。
- 【关键点 3】适用于一个或多个线程等待其他线程完成操作的场景。
- 【关键点 4】是一次性工具,不能重置,与CyclicBarrier不同。
- 【易错点 1】计数器初始值需要与需要等待的线程数一致,设置错误会导致死锁或提前释放。
- 【易错点 2】CountDownLatch不保证线程执行的完成顺序,只保证计数归零时所有等待线程继续。
- 【易错点 3】使用await()时需考虑中断和超时,否则可能导致线程永久阻塞。