Java线程学习之sleep()和wait()的区别
两者比较
sleep() | wait() | |
---|---|---|
所属的类 | Thread类 | Object类 |
调用方式 | Thread.sleep()方式 | 对象.wait()方式 |
理解 | 在哪个位置调用,哪个线程等待 | 对象.wait(),不是调用的对象等待,是访问当前对象的线程等待 |
唤醒方式 | 不需要其他线程唤醒 | 需要其他线程调用notify()/notifyAll()方法唤醒 |
释放锁 | 不会释放锁 | 等待后会释放锁 |
- 两者最主要的区别在于:
sleep()
方法没有释放锁,而wait()
方法释放了锁 。 - 两者都可以暂停线程的执行。
wait()
通常被用于线程间交互/通信,sleep()
通常被用于暂停执行。wait()
方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify()
或者notifyAll()
方法。sleep()
方法执行完成后,线程会自动苏醒。或者可以使用wait(long timeout)
超时后线程会自动苏醒。