Java CountdownLatch任务完成后的倒计时方法行为

Java CountdownLatch任务完成后的倒计时方法行为,java,multithreading,concurrency,countdownlatch,Java,Multithreading,Concurrency,Countdownlatch,假设我有一个大小为3的倒计时锁存器,即从父线程派生出3个线程 CountDownLatch latch = new CountDownLatch(3); latch.await(). 现在将有三个线程在各自的任务完成后调用倒计时 // do something latch.countDown(); 我的问题是,当任务完成时,执行该任务的线程的行为是什么 那个线程是在那个时刻被终止,还是通过进入空闲状态来等待某个时刻 我可以在倒计时闩锁的java文档的任何地方找到它。它取决于子线程中的代码

假设我有一个大小为3的倒计时锁存器,即从父线程派生出3个线程

CountDownLatch latch = new CountDownLatch(3);

latch.await().
现在将有三个线程在各自的任务完成后调用倒计时

// do something
 latch.countDown();
我的问题是,当任务完成时,执行该任务的线程的行为是什么

那个线程是在那个时刻被终止,还是通过进入空闲状态来等待某个时刻


我可以在倒计时闩锁的java文档的任何地方找到它。

它取决于子线程中的代码。如果在
倒计时闩锁
之后还有更多的计算要做,它将继续计算。如果没有,线程将终止。

您过于关注一个典型示例,即有N个从属线程向主线程发送信号

这个
CountDownLatch
只是一个类,它允许代码阻塞,直到一些外部代理将闩锁倒计时到0。句号


这些代理可以是示例中的N个不同线程,也可以是一个倒数多次的线程。因此,您应该停止将这些代理视为线程。门闩不认识他们,也不在乎他们倒计时后是否去酒吧喝啤酒,而不是完成。它不是一个线程管理器,它不监控任何线程的生命周期。

我认为它不会影响线程生命周期,除了可能导致线程产量(允许锁定的线程恢复)之外,但在线程生命周期方面,我认为它不会完全终止线程。我没有对此进行研究,但是,线程将进入
等待
状态,并将“休眠”,直到调度程序重新唤醒它。如果此时它是
Runnable.run
方法返回,那么
线程将死亡。
线程在退出
Runnable.run
之前无法知道是否需要执行更多代码。因此,该行为与调用
Object.wait
相同。在java文档中找不到它的原因是它对线程终止没有影响。但是,如果您希望3个线程重复运行同一任务,但仅当执行
wait()
的线程未执行其处理时,您需要更多的信号。这个问题需要更大的源代码示例:向我们展示一些方法,然后问一个问题,如“当线程a、B和C调用method1()而线程D调用method2()时”“当…”时,线程D会发生什么情况?”还请注意,这完全独立于是否存在倒计时闩锁。闩锁不会以任何方式直接影响任何线程的终止。