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

线程休眠sleep():如果希望地控制线程,使正在执行的线程暂停,将CPU让给别的线程,这时可以使用静态方法sleep(),该方法可以让当前正在执行的线程暂停一段时间,进入休眠等待状态。当前线程调用sleep()方法后,在指定时间内是不会执行的,这样其他线程就可以得到执行机会了。

sleep()方法声明抛出InterruptedException异常,因此在调用该方法时应该捕获异常,或者声明抛出该异常。

注:sleep()是静态方法,只能控制当前正在运行的线程休眠,而不能控制其他线程休眠。当休眠时间 结束后,线程就会返回到就绪状态,而不是立即开始运行。

线程让步yield():该方法和sleep()方法有点相似,都可以 让当前正在进行的线程暂停,区别在于yield()方法不会阻碍该线程,它只是将该线程转换成就绪状态,让系统的调度器重新调度一次。当某个线程调用yield()方法之后,只有与当前线程优先级相同或者更高的线程才能获得执行的机会。

 

区别:sleep()方法不考虑线程的优先级,因此会给低优先级的线程以运行的机会,yield()方法只会给相同优先级或更高优先级的线程以运行的机会;线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态;sleep()方法声明会抛出InterruptedException,而yield()方法没有声明任何异常;sleep()方法比yield()方法具有更好的移植性(跟操作系统CPU调度相关)
 

你可能感兴趣的:(线程的sleep()方法和yield()方法有什么区别?)