【发布时间】:2015-06-15 14:14:26
【问题描述】:
假设我有一个大小为 3 的倒计时闩锁,即 3 个线程是从父线程产生的。
CountDownLatch latch = new CountDownLatch(3);
latch.await().
现在将有三个线程在各自的任务完成后调用 countDown。
// do something
latch.countDown();
我的问题是,任务完成的那一刻,执行该任务的线程的行为是什么。
该线程是在那个时刻终止,还是通过进入空闲状态等待一段时间。 ?
我可以在倒计时锁存器的 java 文档的任何地方找到它。
【问题讨论】:
-
我认为它不会影响线程生命周期,除了可能导致线程屈服(允许锁定的线程恢复),但就线程生命周期而言,我认为它不会终止它完全。
-
不过,我没有对此进行任何研究。
-
线程将进入
WAITING状态并“休眠”直到被调度器重新唤醒。如果此时返回的是Runnable.run方法,则Thread将会死掉。在Runnable.run退出之前,Thread无法知道是否需要执行更多代码。所以行为和调用Object.wait是一样的。 -
在java doc中找不到的原因是它对线程终止没有影响。但是,如果您希望 3 个线程重复运行相同的任务,但只有在执行
await()的线程不进行处理时,您需要更多的信号。 -
这个问题需要一个更大的源代码示例:向我们展示一些方法,然后问一个问题,例如“当线程 A、B 和 C 调用 method1() 并且线程 D 调用 method2() 时,什么发生在线程 D 时..."
标签: java multithreading concurrency countdownlatch