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

Hes*_*sey 9 java multithreading sleep yield

可能重复:
Thread.sleep(0)和Thread.yield()语句是否等效?

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

不同之处是:

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

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

以上两个结论是否正确?

Yoc*_*mer 5

Thread.Sleep()具有稍大的开销,因为它创建了一个包含某种计时器的系统,该计时器将唤醒进程.(基本上取决于实施)
底线它最终会调用一个Yield().

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

Thread.Sleep(0)可能有一个优化只是调用yield.(再次,实施)


Mer*_*ijn -3

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

  • 我认为错了。Thread.sleep() 将使线程脱离运行状态,并允许调度程序将另一个可运行线程切换到运行状态(Thread.yield() 也是如此)。然而,线程确实保留它所持有的所有锁。 (3认同)