假设我想“暂停”一个线程,以便其他线程可以更有效地运行。阻塞变得毫无意义(或几乎毫无意义)之前的最短睡眠时间是多少?
答案 0 :(得分:2)
这很难概括,并会因您的具体问题而有所不同。但是,我不会自己使用睡眠来管理线程。您可以将线程放入Executor
并让它管理它们。您还可以使用PriorityQueue来订购任务。
答案 1 :(得分:2)
IIRC甚至Thread.sleep(0)将导致线程产生,允许其他具有相同或更高优先级的线程运行。
这取决于线程优先级...我的理解是Thread.sleep有效地产生线程,并将其优先级设置为睡眠持续时间内的最低值。
正如其他人所提到的,您可能不应该使用它来手动安排线程。但是,如果您有共享的互斥锁,则可能需要释放它们,然后执行Thread.sleep以帮助解决线程锁定情况。
答案 2 :(得分:2)
我希望任何数量的睡眠至少与调用yield()
的功能相当,所以从来没有一点是“毫无意义”。绝对有一点,小值基本上是无法区分的,因为等待操作系统返回到你的线程的开销比一个小的休眠时间长。这可能发生在5-10范围内的某个地方,但当然它将是特定于操作系统的。