有人可以解释Thread.yield()
方法和Thread.sleep()
方法之间的区别吗?
我是如何理解的:Thread.yield()
放弃了监视器锁定到JVM决定接下来执行的其他线程,并且Thread.sleep()
将当前线程置于睡眠模式达给定的毫秒数而不放弃显示器锁定。
答案 0 :(得分:11)
根据this:
,这取决于您使用的Java版本在Java 5中,
Thread.yield()
调用Windows APISleep(0)
。这有 清除当前线程的量子(数量)的特殊效果 分配CPU的时间片)并将其放在队列的末尾 优先级别。换句话说,所有可运行的线程 相同的优先级(以及更高优先级的优先级)将有机会运行 在给出的线程下一次给定CPU时间之前。几时 最终重新安排,它会回来一个完整的量子,但是 没有"#34;结转"任何剩余的量子从那时起 屈服。此行为与非零睡眠略有不同 睡眠线一般会失去1个量子值(实际上, 十分之一或15分钟的1/3。在Java 6中,此行为已更改。 Hotspot VM现在实现了
Thread.yield()
使用WindowsSwitchToThread()
API调用。这个 call使当前线程放弃当前时间片,但不是 它的整个量子。这意味着取决于优先级 其他线程,屈服线程可以安排在一个 中断期间。
Thread.sleep()
都会暂停当前线程一段时间。
答案 1 :(得分:0)
Thread.sleep()让你的线程休眠一段时间或直到被打断。 Thread.yield()不会让你的线程进入休眠状态。相反,它只是暂时暂停线程以让其他线程完成它们的工作。
答案 2 :(得分:-1)
关闭。 Thread.sleep导致线程在指定时间内休眠,但不会放弃锁定。
Thread.yield也不放弃锁定。它只是提示线程调度程序给另一个线程一些周期。
它们实际上没什么相似之处,它们非常不同。
您是否正在尝试解决某个特定问题?