Thread.sleep(long) 有多少效果?

3

假设我想要“暂停”一个线程,以便其他线程可以更有效地运行。在阻塞变得毫无意义(或几乎毫无意义)之前,最短的睡眠时间是多少?

3个回答

2

这很难概括,具体取决于你的问题。但是,我不会使用sleep来管理线程。你可以将线程放入Executor中并让它管理它们。您还可以使用PriorityQueue来排序您的任务。


我不认为 Executors 能够预测线程何时处于空闲状态(或者他们能吗?) - someguy

2

据我所知,即使是Thread.sleep(0),也会导致线程让出CPU时间片,允许具有相同或更高优先级的其他线程运行。

这取决于线程优先级... 我的理解是,Thread.sleep有效地让线程让出CPU时间片,并将其优先级设置为最低,以便在睡眠期间运行。

正如其他人所提到的,你可能不应该使用它来手动调度线程。然而,如果你有共享的互斥锁,你可能需要释放它们并执行Thread.sleep以帮助解决线程死锁情况。


这不是关于调度的问题,而是关于更有效地处理资源的问题。 - someguy

2

我希望任何长度的睡眠都至少等同于调用 yield(),因此不会出现“无意义”的情况。当小值的睡眠时间比等待操作系统返回到您的线程的开销更长时,存在一个明显的点,这些小值基本上是无法区分的。这可能发生在5-10的范围内,但当然它将取决于操作系统。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接