Hes*_*sey 9 java multithreading sleep yield
根据我的理解,Thread.yield()和Thread.sleep(0)都应该让CPU重新判断某个调度算法运行哪个线程.
不同之处是:
Thread.yield()是给其他线程的执行机会,但Thread.sleep(0)不会,它只会告诉CPU你应该重新安排执行线程,包括当前线程本身.
Thread.yield()只是一个建议,这意味着它可能根本不被接受,但Thread.sleep(0)将强制进行重新排列.
以上两个结论是否正确?
Thread.Sleep()具有稍大的开销,因为它创建了一个包含某种计时器的系统,该计时器将唤醒进程.(基本上取决于实施)
底线它最终会调用一个Yield().
Thread.Yield() 只是放弃线程,并在下一轮获得它.
Thread.Sleep(0)可能有一个优化只是调用yield.(再次,实施)
Mer*_*ijn -3
Thread.sleep()只会暂停线程而不放弃控制权。
Thread.yield()将暂停该线程并允许其他线程运行。如果没有线程需要,原始线程将立即恢复。