前言:本文解决的问题
wait() await() sleep()这三个方法有申请区别
在找工作的各种笔试题目中,经常看到wait()、sleep()还有await(),功能都很相似,到底有什么区别?什么时候该用哪一种方法
1. wait() VS sleep()
wait和sleep的比较可以说是高频面试题。方法原型分别为:
public final native void wait(long timeout) throws InterruptedException;
public static native void sleep(long millis) throws InterruptedException;
同:
都是线程同步时会用到的方法,使当前线程暂停运行,把运行机会交给其它线程。
如果任何线程在等待期间被中断都会抛出InterruptedException
都是native方法
异:
所在类不同,wait()是Object超类中的方法;而sleep()是线程Thread类中的方法
关键点是对锁的保持不同,wait会释放锁;而sleep()并不释放锁
唤醒方法不完全相同,wait依靠notify或者notifyAll、中断发生、或者到达指定时间来唤醒;而sleep()则是到达指定的时间后被唤醒。
使用的位置不同,wait只能用在同步代码块中,而sleep用在任何位置。
2. wait() VS await()
这两个长得很像。await()的实现比较复杂。
public final void await() throws