线程被禁用以进行线程调度。那是什么意思?

时间:2014-09-08 16:51:56

标签: java multithreading

当我通过Javadoc for CountDownLatch时,我在await方法的文档中遇到了一行。

  

如果当前计数大于零则为当前线程   因线程调度而被禁用并处于休眠状态

这里current thread becomes disabled for thread scheduling purposes是什么意思?

2 个答案:

答案 0 :(得分:8)

在给定的系统上,只有固定数量的线程可以同时实际执行(您受到机器中核心数量的限制。)当运行的线程多于核心时,该线程调度程序将以某种方式循环遍历线程,为每个CPU提供一些时间。

但是,在某些情况下,在CPU上给出一个线程时间是没有意义的。例如,如果一个线程获得一个总计大于零的倒计时锁存器,则该线程被卡住,等待其他线程也获取该锁存器。因此,让该线程有任何CPU时间没有任何意义,因为线程只是坐着等待其他线程。因此,通常,调度程序甚至不会尝试为线程提供任何CPU时间,而是优先安排其他仍然可以取得进展的线程。一旦有足够的线程获取倒计时锁存器,则以这种方式阻塞的所有线程将被放回调度程序中以供进一步考虑。

换句话说,线程停止运行,调度程序将智能地不浪费时间尝试运行它,直到锁存器准备就绪。

希望这有帮助!

答案 1 :(得分:0)

这只是意味着该线程中的代码不再进一步,直到从其他线程在同一个锁存器上调用latch.countDown(),从而使锁存器计数为0.。

线程在处于可运行状态时运行,并且调度程序会对其进行调度。当一个线程被禁用进行调度时,它将无法获得其cpu周期的份额,因此它不会运行,这意味着它的程序计数器不会增加。它的堆栈会冻结,直到它再次获得cpu。