Skip to content

面试速答(先看这里)

**一句话结论:**CountDownLatch、CyclicBarrier、Semaphore都是Java并发库中的 同步辅助类 ,它们 都可以用来协调多个线程之间的执行 。

60秒标准回答:

CountDownLatch、CyclicBarrier、Semaphore都是Java并发库中的 同步辅助类 ,它们 都可以用来协调多个线程之间的执行

但是,它们三者之间还是有一些区别的

CountDownLatch是一个计数器 ,它允许一个或多个线程等待其他线程完成操作。 它通常用来实现一个线程等待其他多个线程完成操作之后再继续执行的操作

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**CountDownLatch是一个计数器 ,它允许一个或多个线程等待其他线程完成操作。
  • **要点2:**CyclicBarrier是一个同步屏障 ,它允许多个线程相互等待,直到到达某个公共屏障点,才能继续执行。
  • **要点3:**Semaphore是一个计数信号量 ,它允许多个线程同时访问共享资源,并通过计数器来控制访问数量。
  • **要点4:**CountDownLatch适用于一个线程等待多个线程完成操作的情况
  • **要点5:**使用CountDownLatch、CyclicBarrier、Semaphore实现线程协调:

**记忆锚点:**CountDownLatch → CyclicBarrier → Semaphore → 适用于一个线程 → 同步辅助类 → Semaphore区别

关键取舍:

  • Semaphore是一个计数信号量 ,它允许多个线程同时访问共享资源,并通过计数器来控制访问数量。
  • 它通常用来实现一个线程需要等待获取一个许可证才能访问共享资源,或者需要释放一个许可证才能完成操作的操作。
  • CountDownLatch适用于一个线程等待多个线程完成操作的情况 CyclicBarrier适用于多个线程在同一个屏障处等待 Semaphore适用于一个线程需要等待获取许可证才能访问共享 使用CountDownLatch、CyclicBarrier、Semaphore实现线程协调:

追问准备:

  • 围绕「CountDownLatch」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「CyclicBarrier」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「Semaphore」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

CountDownLatch、CyclicBarrier、Semaphore都是Java并发库中的同步辅助类,它们都可以用来协调多个线程之间的执行。

但是,它们三者之间还是有一些区别的:

CountDownLatch是一个计数器,它允许一个或多个线程等待其他线程完成操作。它通常用来实现一个线程等待其他多个线程完成操作之后再继续执行的操作。

CyclicBarrier是一个同步屏障,它允许多个线程相互等待,直到到达某个公共屏障点,才能继续执行。它通常用来实现多个线程在同一个屏障处等待,然后再一起继续执行的操作。

Semaphore是一个计数信号量,它允许多个线程同时访问共享资源,并通过计数器来控制访问数量。它通常用来实现一个线程需要等待获取一个许可证才能访问共享资源,或者需要释放一个许可证才能完成操作的操作。

CountDownLatch适用于一个线程等待多个线程完成操作的情况

CyclicBarrier适用于多个线程在同一个屏障处等待

Semaphore适用于一个线程需要等待获取许可证才能访问共享

使用CountDownLatch、CyclicBarrier、Semaphore实现线程协调:

📄 ✅有三个线程T1,T2,T3如何保证顺序执行?