【发布时间】:2011-06-17 04:18:16
【问题描述】:
可能重复:
Are Thread.sleep(0) and Thread.yield() statements equivalent?
据我了解,Thread.yield() 和 Thread.sleep(0) 都应该让 CPU 通过某种调度算法重新判断运行哪个线程。
区别在于:
Thread.yield() 是给其他线程执行机会,但Thread.sleep(0) 不会,它只会告诉CPU 你应该重新安排执行线程,包括当前线程本身。
Thread.yield() 只是一个建议,这意味着它可能根本不被接受,但 Thread.sleep(0) 会强制重新排列。
以上两个结论对吗?
【问题讨论】:
-
由于这些方法非常依赖于实现,所以很难说。您不应依赖这些方法的行为。例如,如果您有一个只执行 Thread.yield() 的循环,它不会在 99% 以上的时间内放弃 CPU。 Thread.sleep(0) 可能会休眠 0.5 到 2 毫秒,具体取决于操作系统,放弃 CPU,但这也不能保证。
标签: java multithreading sleep yield