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