wait()和sleep()方法的区别

多线程开发中,让线程暂停执行是常见场景,Java提供了*sleep()wait()*两种实现方法,但在具体使用上又有稍微差别。

异同

  • 相同点:*sleep()wait()*的作用都是暂停线程的执行,进入阻塞状态,让出CPU时间片段。
  • 区别
    • 锁资源的释放:*sleep()方法调用后线程不会释放锁资源;wait()*方法调用后线程会释放锁资源。
    • 使用场景:*sleep()仅用于线程暂停执行;wait()*通常用于线程间交互或通信;
    • 线程唤醒:*sleep()*调用后线程会自动唤醒(由系统调度器唤醒,时间到了被调度);wait()调用后,线程不会自动唤醒(需要其它线程使用同一个对象上的notify()或者notifyAll()方法唤醒),也可以使用带有超时设置的wait()方法超时后自动唤醒。