java面试题42wait和sleep方法的不同

在 Java 多线程编程中,wait()sleep() 都是用来暂停当前线程执行的方法,但它们在设计目的、行为机制和使用场景上存在本质区别。理解这些区别对于编写正确的并发代码至关重要。

以下是它们的主要不同点:

特性 wait() 方法 sleep() 方法
所属类 java.lang.Object java.lang.Thread
调用方式 对象.wait()对象.wait(long timeout) Thread.sleep(long millis)
释放锁 会释放对象监视器锁 (synchronized 锁) 不会释放任何锁
唤醒条件 必须由其他线程调用同一个对象notify()notifyAll(),或超时 等待指定时间后自动唤醒,或被 interrupt() 中断
使用位置 必须synchronized 方法或同步块内部调用 可以在任何地方调用(不需要持有锁)
线程状态 进入 WAITINGTIMED_WAITING 状态 进入 TIMED_WAITING 状态
异常 可能抛出 InterruptedException 可能抛出 Interrupted

你可能感兴趣的:(java,服务器,开发语言)