Java线程 sleep、yield、wait 方法的区别.md

Thread.sleep()
  • sleep方法暂停当前线程,释放线程执行权,会给其他的线程执行机会,不会理会其他线程的优先级。当在含同步方法或者同步代码块,使用 sleep 并不会释放同步锁。
  • sleep方法会将线程转入阻塞状态,直到经过阻塞时间才会转入就绪状态。
  • sleep 方法会抛出 InterruptedException,所以要么捕获该异常,要么抛出该异常。
  • sleep 比 yield 具有更好的移植性

    抽象程度不同,sleep具有更高的抽象,sleep具体执行的操作是抽象的,不同架构和系统乃至虚拟机都可以简单实现,而yield比较底层,部分体系内可能未实现这个语义,或者是以不期望的方式。

Thread.yield()
  • yield方法不会将线程转入阻塞状态,它只是强制当前线程进入就绪状态,因此完全有可能某个线程调用 yield 方法暂停之后,立即再次获得处理器资源被执行。
同步监视器的wait()

wait方法是Object中的方法

  • 当前线程执行同步方法或者同步代码块时,程序执行了同步监视器对象的wait()方法,则当前线程暂停,并释放同步监视器。

还有线程的suspend和resume方法,suspend将线程挂起,该线程不会释放同步监视器。resume方法是将挂起的线程重新进入就绪状态。这两个方法都是过时方法,程序应该尽量避免使用suspend和resume方法。

你可能感兴趣的:(Java线程 sleep、yield、wait 方法的区别.md)