Java并发面试题, 什么是 Java 的 CountDownLatch?
Java并发面试题, 什么是 Java 的 CountDownLatch?
QA
Step 1
Q:: 什么是 Java 的 CountDownLatch?
A:: CountDownLatch 是 java.util.concurrent 包中的一个同步辅助类,用来协调多个线程之间的同步。它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。通过 CountDownLatch,可以实现类似于 '倒计时' 的功能,在计数器值到达零之前,调用 await()
方法的线程会一直阻塞。
Step 2
Q:: CountDownLatch 的构造方法是什么?
A:: CountDownLatch 的构造方法需要传入一个 int 类型的参数,该参数指定了计数的次数。构造方法的签名是:public CountDownLatch(int count)
。
Step 3
Q:: 如何使用 CountDownLatch 进行线程同步?
A:: 使用 CountDownLatch 进行线程同步的步骤包括:1) 在主线程中创建 CountDownLatch 对象并指定计数值;2) 在每个工作线程中,执行完任务后调用 countDown() 方法来减少计数;3) 在主线程中调用 await()
方法,直到计数值减为零,主线程才会继续执行。
Step 4
Q:: CountDownLatch 和 CyclicBarrier 的区别是什么?
A:: CountDownLatch 和 CyclicBarrier 都是用于多线程协作的工具,但它们有不同的用途。CountDownLatch 通常用于一组线程等待另一组线程完成某个任务,而 CyclicBarrier 用于一组线程相互等待,直到所有线程都到达某个共同点后再继续执行。另一个重要区别是 CountDownLatch 是一次性的,计数器一旦到达零就不能重置,而 CyclicBarrier 可以重用。
Step 5
Q:: CountDownLatch 在生产环境中的典型应用场景有哪些?
A:: CountDownLatch 通常用于:1) 启动一个服务时,确保依赖的所有外部服务都已经启动完成;2) 并行分割任务,等待所有子任务完成后再进行汇总;3)
实现最大并行数控制,限制某个资源的并发访问量。