面试题答案
一键面试常见使用场景
- 多线程协作等待:比如在一个应用程序中,主线程需要等待多个子线程完成各自的任务后再进行汇总计算。例如在数据分析场景中,多个子线程分别处理不同部分的数据,主线程等待所有子线程处理完毕后,对数据进行整合和分析。
- 模拟并发请求:在性能测试中,希望多个线程同时发起请求来测试系统在高并发下的性能。可以使用
CountDownLatch
让所有线程在同一时刻开始执行。
实现原理
- 构造函数:
CountDownLatch
通过构造函数传入一个初始计数值count
,这个计数值表示需要等待的操作数。 - await方法:当一个线程调用
CountDownLatch
的await
方法时,该线程会被阻塞,直到count
的值变为0。 - countDown方法:其他线程执行完任务后,调用
countDown
方法,该方法会将count
的值减1。当count
的值减到0时,所有因调用await
方法而被阻塞的线程会被释放,继续执行后续的代码。其内部是基于AQS(AbstractQueuedSynchronizer)框架实现的,通过AQS的同步队列来管理等待的线程。