MST

星途 面试题库

面试题:Java中CountDownLatch与CyclicBarrier的区别

请详细阐述Java并发工具类中CountDownLatch与CyclicBarrier在使用场景、工作原理以及重置机制等方面的区别。
40.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

使用场景区别

  • CountDownLatch:用于一个或多个线程等待其他一组线程完成操作后再继续执行。例如,主线程等待所有子线程完成数据加载后再进行汇总计算。
  • CyclicBarrier:用于一组线程相互等待,直到所有线程都到达某个屏障点,然后这些线程再一起继续执行。比如多个运动员在起跑线等待,所有人都准备好后一起起跑。

工作原理区别

  • CountDownLatch:通过一个计数器来实现,初始化时设置计数器的值,每个需要等待的操作完成后,调用 countDown() 方法将计数器减1 ,当计数器值为0时,等待在 await() 方法的线程被唤醒。
  • CyclicBarrier:同样有一个计数器,初始化为参与线程的数量。每个线程到达屏障点时调用 await() 方法,此时该线程被阻塞,同时计数器减1 。当计数器值为0时,所有被阻塞的线程被唤醒并继续执行。

重置机制区别

  • CountDownLatch:CountDownLatch一旦计数为0,无法重置。如果需要重新使用类似功能,必须重新创建一个新的CountDownLatch实例。
  • CyclicBarrier:可以通过调用 reset() 方法将计数器重置为初始值,从而可以重复使用。在所有线程都通过屏障点后,CyclicBarrier可以被再次使用,使得线程组能够再次在屏障点同步。