sleep()方法和yield()方法的区别

Posted 小志的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sleep()方法和yield()方法的区别相关的知识,希望对你有一定的参考价值。

一、yield()方法的作用

  • yield()是一个静态方法,一旦执行,它会使当前线程让出CPU。但要注意,让出CPU并不表示当前线程不执行了。当前线程在让出CPU之后,还会进行 CPU 资源的争夺,但是是否能够再次被分配到,就不一定了。
  • 因此,对Thread.yield()的调用就好像是在说:我已经完成一些最量要的工作了,我应该是可以休息一下了,可以给其他线程一些工作机会。
  • 如果你觉得一个线程不那么重要,或者优先级非常低,而且又害怕它会占用太多的CPU资源,那么可以在适当的时候调用Thread.yield(),给其它重要线程更多的工作机会。

二、sleep()方法和yield()方法的区别

  • sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会;
  • 线程执行 sleep()方法后转入阻塞(blocked)状态,而执行 yield()方法后转入就绪 (ready)状态;
  • sleep()方法声明抛出 InterruptedException,而yield()方法没有声明任何异常;
  • sleep()方法比yield()方法 (跟操作系统 CPU 调度相关)具有更好的可移植性,通常不建议使用 yield()方法来控制并发线程的执行。

以上是关于sleep()方法和yield()方法的区别的主要内容,如果未能解决你的问题,请参考以下文章

线程的sleep()方法和yield()方法区别

sleep()方法和yield()方法的区别

线程的 sleep()方法和 yield()方法有什么区别?

线程的 sleep()方法和 yield()方法有什么区别?

线程的sleep()方法和yield()方法有什么区别?

sleep()方法和yield()方法有什么区别?