wait()和sleep()方法的区别
多线程开发中,让线程暂停执行是常见场景,Java提供了*sleep()和wait()*两种实现方法,但在具体使用上又有稍微差别。
异同
- 相同点:*sleep()和wait()*的作用都是暂停线程的执行,进入阻塞状态,让出CPU时间片段。
- 区别
- 锁资源的释放:*sleep()方法调用后线程不会释放锁资源;wait()*方法调用后线程会释放锁资源。
- 使用场景:*sleep()仅用于线程暂停执行;wait()*通常用于线程间交互或通信;
- 线程唤醒:*sleep()*调用后线程会自动唤醒(由系统调度器唤醒,时间到了被调度);wait()调用后,线程不会自动唤醒(需要其它线程使用同一个对象上的notify()或者notifyAll()方法唤醒),也可以使用带有超时设置的wait()方法超时后自动唤醒。