我知道一个区别:
如果我们说thread.sleep(1000)
,那个线程肯定会睡眠1000
毫秒,而yield()
没有这样的保证。这对于线程调度很有用,因为调用yield()
的线程可能会立即再次选择运行。
还有什么?
答案 0 :(得分:13)
t.interrupt()
InterruptedException
.yield()
很大程度上基于线程优先级概念。 (所有线程都分配了优先级,当优先级较高的线程处于Runnable状态时,它通常会抢占/停止执行较低优先级的线程,具体取决于ThreadScheduler的实现。)注意:强>
Thread.sleep()
和Thread.yield()
都是静态函数,会影响执行它的当前线程。答案 1 :(得分:11)
yield
只是说:现在是让另一个线程运行并且是调度程序提示的好时机。 sleep
确实这样做:至少在给定时间内睡觉。
答案 2 :(得分:3)
yield()暂时暂停当前线程,允许线程调度程序执行具有相同优先级的其他线程。如果没有其他线程在等待或者它们的优先级较低,则生成的线程立即返回执行。
sleep()强制当前线程暂停其执行一段时间。其他等待线程将通过利用此暂停开始执行,即遵循线程调度程序策略 - 其实现依赖于供应商。
答案 3 :(得分:2)
“肯定” - 根据操作系统的线程调度算法,以及优先级更高的优势,您的线程可能需要一个小时才能再次运行线程。
yield()
唯一能说的是,“好吧,我已经完成了,所以请随时结束我的时间片并继续执行其他操作。”另一方面,sleep
说“用X毫秒唤醒我”。 sleep
用于等待,另一个用于给予其他人运行的机会。 他们不是替代品。