Thread.sleep() 的 Java 性能问题

2022-09-02 00:30:53

内联 Java IDE 提示指出,“在循环中调用 Thread.sleep 可能会导致性能问题。我在文档的其他地方找不到任何解释。这句话。

为什么?如何?还有什么其他方法可以延迟线程的执行?


答案 1

这并不是说循环本身就是一个性能问题,但它通常暗示你做错了什么。Thread.sleep

while(! goodToGoOnNow()) {
   Thread.sleep(1000);
}

仅当您要暂停话题一段时间时才使用。如果您想等待某个条件,请不要使用它。Thread.sleep

对于此情况,应改用并发 utils 包中的某些构造或某些构造。wait/notify

仅当等待当前 JVM 外部的条件(例如,等待另一个进程写入文件)时,才应使用 轮询 。Thread.sleep


答案 2

这取决于等待是否依赖于另一个线程完成工作,在这种情况下,您应该使用受保护的块,还是Java 1.6中引入的高级并发类。我最近不得不修复一些使用Thread sleeps而不是受保护块的代码。使用以前的方法,无法确保正确的并发性。如果你只是想让线程像游戏一样休眠,在核心游戏循环中暂停执行一段时间,以便线程有良好的执行时间,这是完全可以的。CircularByteBufferThread.sleep(..)