面试题95:sleep()方法和yield()方法的区别是什么?

2023-05-10 10:54:46 浏览数 (2)

【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()方法来控制并发线程的执行。

0 人点赞