Thread.yield()和Thread.sleep()之间的区别

时间:2013-02-24 02:55:42

标签: java multithreading synchronization thread-safety

有人可以解释Thread.yield()方法和Thread.sleep()方法之间的区别吗?

我是如何理解的:Thread.yield()放弃了监视器锁定到JVM决定接下来执行的其他线程,并且Thread.sleep()将当前线程置于睡眠模式达给定的毫秒数而不放弃显示器锁定。

3 个答案:

答案 0 :(得分:11)

根据this

,这取决于您使用的Java版本
  

在Java 5中,Thread.yield()调用Windows API Sleep(0)。这有   清除当前线程的量子(数量)的特殊效果   分配CPU的时间片)并将其放在队列的末尾   优先级别。换句话说,所有可运行的线程   相同的优先级(以及更高优先级的优先级)将有机会运行   在给出的线程下一次给定CPU时间之前。几时   最终重新安排,它会回来一个完整的量子,但是   没有"#34;结转"任何剩余的量子从那时起   屈服。此行为与非零睡眠略有不同   睡眠线一般会失去1个量子值(实际上,   十分之一或15分钟的1/3。

     

在Java 6中,此行为已更改。 Hotspot VM现在实现了   Thread.yield()使用Windows SwitchToThread() API调用。这个   call使当前线程放弃当前时间片,但不是   它的整个量子。这意味着取决于优先级   其他线程,屈服线程可以安排在一个   中断期间。


无论你使用什么Java版本,

Thread.sleep()都会暂停当前线程一段时间。

答案 1 :(得分:0)

Thread.sleep()让你的线程休眠一段时间或直到被打断。 Thread.yield()不会让你的线程进入休眠状态。相反,它只是暂时暂停线程以让其他线程完成它们的工作。

答案 2 :(得分:-1)

关闭。 Thread.sleep导致线程在指定时间内休眠,但不会放弃锁定。

Thread.yield也不放弃锁定。它只是提示线程调度程序给另一个线程一些周期。

它们实际上没什么相似之处,它们非常不同。

您是否正在尝试解决某个特定问题?

相关问题