interview
java-concurrency
什么是Java的CountDownLatch?

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) 实现最大并行数控制,限制某个资源的并发访问量。

用途

面试 CountDownLatch 相关内容的目的是考察候选人对多线程编程和并发控制的理解。多线程编程在现代软件开发中非常常见,特别是在高并发、高性能的系统中,合理地使用并发工具可以显著提高系统的性能和可靠性。CountDownLatch 是一个简单但有效的同步工具,掌握它的使用能够帮助开发者更好地管理线程之间的协调和依赖。\n

相关问题

🦆
什么是 Java 的 Semaphore?

Semaphore 是一个计数信号量,用于控制同时访问特定资源的线程数量。它通过维护一个许可集来实现对资源的访问控制。acquire() 方法用于请求许可,如果没有可用许可,线程将阻塞,release() 方法用于释放许可。

🦆
什么是 Java 的 CyclicBarrier?

CyclicBarrier 是一个同步辅助类,它允许一组线程相互等待,直到所有线程都到达一个共同的屏障点。它可以被重复使用,因为每次所有线程到达屏障点后,屏障就会被重置。CyclicBarrier 的构造方法允许指定一个 Runnable,在所有线程到达屏障点后执行。

🦆
什么是 Java 的 Phaser?

Phaser 是一个更灵活的同步屏障类,可以替代 CountDownLatch 和 CyclicBarrier。Phaser 支持动态调整参与者的数量,并且可以在不同的阶段中有不同的行为。它通过 register() 和 arrive() 方法管理参与者的注册和到达。

🦆
什么是 Java 的 Exchanger?

Exchanger 是一个用于线程间数据交换的同步点。两个线程可以在同一个 Exchanger 对象上交换数据。一个线程调用 exchange() 方法时,如果另一个线程已经在等待交换数据,则立即进行交换,否则当前线程会阻塞,直到另一个线程到达。

🦆
Java 中的同步方法和同步块有什么区别?

同步方法是通过在方法声明中使用 synchronized 关键字来实现的,整个方法是同步的。而同步块则是通过 synchronized 关键字在方法内部实现的,只同步特定的代码块。同步块更加灵活,可以减少同步的范围,从而提高性能。