假设我想要“暂停”一个线程,以便其他线程可以更有效地运行。在阻塞变得毫无意义(或几乎毫无意义)之前,最短的睡眠时间是多少?
假设我想要“暂停”一个线程,以便其他线程可以更有效地运行。在阻塞变得毫无意义(或几乎毫无意义)之前,最短的睡眠时间是多少?
这很难概括,具体取决于你的问题。但是,我不会使用sleep来管理线程。你可以将线程放入Executor
中并让它管理它们。您还可以使用PriorityQueue来排序您的任务。
据我所知,即使是Thread.sleep(0),也会导致线程让出CPU时间片,允许具有相同或更高优先级的其他线程运行。
这取决于线程优先级... 我的理解是,Thread.sleep有效地让线程让出CPU时间片,并将其优先级设置为最低,以便在睡眠期间运行。
正如其他人所提到的,你可能不应该使用它来手动调度线程。然而,如果你有共享的互斥锁,你可能需要释放它们并执行Thread.sleep以帮助解决线程死锁情况。
我希望任何长度的睡眠都至少等同于调用 yield()
,因此不会出现“无意义”的情况。当小值的睡眠时间比等待操作系统返回到您的线程的开销更长时,存在一个明显的点,这些小值基本上是无法区分的。这可能发生在5-10的范围内,但当然它将取决于操作系统。