Java中的Thread.yield()和Thread.sleep(0)有什么区别?

时间:2011-01-28 10:57:07

标签: java multithreading sleep yield

  

可能重复:
  Are Thread.sleep(0) and Thread.yield() statements equivalent?

根据我的理解,Thread.yield()和Thread.sleep(0)都应该让CPU重新判断某个调度算法运行哪个线程。

区别在于:

  1. Thread.yield()是给其他线程的执行机会,但是Thread.sleep(0)不会,它只会告诉CPU你应该重新安排执行线程,包括当前线程本身。

  2. Thread.yield()只是一个建议,这意味着它可能根本不被接受,但Thread.sleep(0)将强制重新排列。

  3. 以上两个结论是否正确?

2 个答案:

答案 0 :(得分:5)

Thread.Sleep()的开销略大,因为它会创建一个包含某种计时器的系统,该计时器将唤醒进程。 (主要取决于实施)
最后,它最终会调用Yield()

Thread.Yield()只是放弃线程,并在下一轮获得它。

Thread.Sleep(0)可能会优化调用yield。 (再次,实施)

答案 1 :(得分:-3)

Thread.sleep()只会暂停线程并且不会放弃控制权。 Thread.yield()将暂停该线程并允许其他线程运行。如果没有线程需要,原始线程将立即恢复。