Java中sleep和wait的区别
相同点:
-
sleep()和wait()都会使当前线程进入阻塞状态。
-
sleep()和wait()都需要捕获异常。
public final native void wait(long timeout) throws InterruptedException; public static native void sleep(long millis) throws InterruptedException;
不同点:
- 两个方法声明位置不同,sleep()是声明在Thread中的方法,wait()是声明在Object中的方法。
- sleep()可以在任意场景使用,wait()必须使用在同步代码块或者同步方法中(否则会抛出IllegalMonitorStateException异常)。
- 在同步代码块或者同步方法中,使用sleep()不会释放锁,使用wait()会释放锁。
- wait()可以在指定时间后自己唤醒也可以使用notity()或者notityAll()来唤醒,notity()或者notityAll()不能唤醒sleep()。