【发布时间】:2011-07-06 15:10:31
【问题描述】:
在javadoc中有说yield方法
使当前正在执行的线程对象暂时暂停并允许其他线程执行。
Katherine Sierra 和 Bert Bates SCJP 的书说
yield() 应该做的是 使当前正在运行的线程头回到可运行状态以允许其他线程 轮到他们的优先级相同。
那么实际上方法在做什么呢?
【问题讨论】:
-
我在这里没有看到问题。您对引用的文档有什么不理解的地方?
-
我只是认为相同优先级的线程不包括优先级高于1的线程,产生所谓的方法
-
源码说明一切
public static native void yield();:p -
因为我确定它在 Windows 上的作用 - 调用 sleep(0): msdn.microsoft.com/en-us/library/ms686298%28v=vs.85%29.aspx IOW: 将线程返回到 OS 调度程序队列。
-
如果你把 yield() 放在一个繁忙的循环中,它平均需要大约 20 微秒,并且在 99%+ 的时间里它不会传递给另一个线程。一个进程可以随时传递给另一个线程,它只会让它更有可能发生在你调用 yield() 的地方。
标签: java multithreading yield