当我通过Javadoc for CountDownLatch时,我在await方法的文档中遇到了一行。
如果当前计数大于零则为当前线程 因线程调度而被禁用并处于休眠状态
这里current thread becomes disabled for thread scheduling purposes
是什么意思?
答案 0 :(得分:8)
在给定的系统上,只有固定数量的线程可以同时实际执行(您受到机器中核心数量的限制。)当运行的线程多于核心时,该线程调度程序将以某种方式循环遍历线程,为每个CPU提供一些时间。
但是,在某些情况下,在CPU上给出一个线程时间是没有意义的。例如,如果一个线程获得一个总计大于零的倒计时锁存器,则该线程被卡住,等待其他线程也获取该锁存器。因此,让该线程有任何CPU时间没有任何意义,因为线程只是坐着等待其他线程。因此,通常,调度程序甚至不会尝试为线程提供任何CPU时间,而是优先安排其他仍然可以取得进展的线程。一旦有足够的线程获取倒计时锁存器,则以这种方式阻塞的所有线程将被放回调度程序中以供进一步考虑。
换句话说,线程停止运行,调度程序将智能地不浪费时间尝试运行它,直到锁存器准备就绪。
希望这有帮助!
答案 1 :(得分:0)
这只是意味着该线程中的代码不再进一步,直到从其他线程在同一个锁存器上调用latch.countDown(),从而使锁存器计数为0.。
线程在处于可运行状态时运行,并且调度程序会对其进行调度。当一个线程被禁用进行调度时,它将无法获得其cpu周期的份额,因此它不会运行,这意味着它的程序计数器不会增加。它的堆栈会冻结,直到它再次获得cpu。