3 回答
TA贡献1772条经验 获得超6个赞
是的,您理解正确。 CountDownLatch按照闩锁原理工作,主线程将等待直到门打开。在创建时,一个线程等待n个线程CountDownLatch。
调用的任何线程(通常是应用程序的主线程)都CountDownLatch.await()将等到计数达到零或被另一个线程中断为止。所有其他线程在CountDownLatch.countDown()完成或准备就绪后都需要通过调用来递减计数。
一旦计数达到零,等待线程就会继续。的缺点/优点之一CountDownLatch是不可重用:一旦计数达到零,就不能再使用CountDownLatch了。
编辑:
使用CountDownLatch当一个线程(比如主线程),需要等待一个或多个线程来完成,才能继续处理。
CountDownLatch在Java 中使用的经典示例是使用服务体系结构的服务器端核心Java应用程序,其中多个线程提供了多个服务,并且在所有服务都成功启动之前,该应用程序无法开始处理。
PS OP的问题有一个非常简单的示例,因此我没有列出。
TA贡献1880条经验 获得超4个赞
CountDownLatch
Java中的Java是一种同步器,它允许一个Thread
人等待一个或多个Thread
s才开始处理。
CountDownLatch
按照闩锁原理工作,线程将等到门打开。创建时,一个线程等待n
指定的线程数CountDownLatch
。
例如 final CountDownLatch latch = new CountDownLatch(3);
在这里,我们将计数器设置为3。
调用的任何线程(通常是应用程序的主线程)都CountDownLatch.await()
将等到计数达到零或被另一个中断Thread
。所有其他线程在CountDownLatch.countDown()
完成或准备就绪后都需要通过调用来递减计数。一旦计数达到零,Thread
等待就开始运行。
在这里,计数通过CountDownLatch.countDown()
方法递减。
在Thread
它调用await()
方法将等到初始计数到达零。
为了使计数为零,其他线程需要调用该countDown()
方法。一旦计数变为零,调用该await()
方法的线程将恢复(开始执行)。
缺点CountDownLatch
是它不可重用:一旦计数变为零,它就不再可用。
添加回答
举报