可能重复:
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)将强制重新排列。
以上两个结论是否正确?
答案 0 :(得分:5)
Thread.Sleep()
的开销略大,因为它会创建一个包含某种计时器的系统,该计时器将唤醒进程。 (主要取决于实施)
最后,它最终会调用Yield()
。
Thread.Yield()
只是放弃线程,并在下一轮获得它。
Thread.Sleep(0)
可能会优化调用yield。 (再次,实施)
答案 1 :(得分:-3)
Thread.sleep()
只会暂停线程并且不会放弃控制权。
Thread.yield()
将暂停该线程并允许其他线程运行。如果没有线程需要,原始线程将立即恢复。