2010-04-07 118 views
3

比方说,我想“暂停”一个线程,以便其他线程可以更高效地运行。阻塞变得毫无意义(或几乎毫无意义)之前的最短休眠时间是多少?Thread.sleep(long)有效吗?

回答

2

我期望任何量的睡眠都至少是调用yield()的功能等价物,所以从来没有一点是“毫无意义的”。确实有一点,一个小的值本质上是无法区分的,因为等待操作系统返回到线程的开销比一个小的睡眠时间长。这可能发生在5-10范围内的某个地方,但它当然是特定于操作系统的。

2

这很难一概而论,并会因您的具体问题而有所不同。但是,我不会自己睡觉来管理线程。您可以将线程放入Executor并让它管理它们。您也可以使用PriorityQueue来订购您的任务。

+0

我不认为执行者可以预测线程何时空闲(或者他们可以吗?) – someguy 2010-04-07 18:05:17

2

IIRC甚至Thread.sleep(0)将使线程屈服,允许其他具有相同或更高优先级的线程运行。

这取决于线程的优先级......我的理解是,Thread.sleep有效地产生线程,并将其优先级设置为睡眠期间的最低值。

正如其他人所提到的,你可能不应该使用它来手动安排你的线程。但是,如果您已经共享互斥锁,则可能需要释放它们,然后执行Thread.sleep以帮助解决线程锁定情况,这很有用。

+0

这不是关于调度;这是关于更有效地处理资源。 – someguy 2010-04-07 18:01:27