java 中sleep() 和 wait() 有什么区别?

sleep()属于Thread类,不释放锁;wait()属于Object类,需在同步块中调用并释放锁,二者调用方式与锁处理机制不同。

java 中sleep() 和 wait() 有什么区别?

Java 中,sleep()wait() 都能让线程暂停执行一段时间,但它们的使用场景、所属类和对锁的处理方式完全不同。

1. 所属类和调用方式不同

sleep()Thread 类 的静态方法,直接通过 Thread.sleep() 调用,作用于当前线程。
wait()Object 类 的方法,必须在同步块或同步方法中由对象调用,例如 obj.wait(),表示当前线程等待该对象的唤醒信号。

java 中sleep() 和 wait() 有什么区别?

有道小P

有道小P,新一代AI全科学习助手,在学习中遇到任何问题都可以问我。

java 中sleep() 和 wait() 有什么区别?64

查看详情 java 中sleep() 和 wait() 有什么区别?

2. 是否释放锁

这是两者最核心的区别
– 调用 sleep() 后,线程虽然暂停运行,但不会释放已持有的监视器锁(synchronized 锁)
– 调用 wait() 时,线程会,并进入该对象的等待队列,允许其他线程获取锁并执行同步代码。

3. 唤醒机制不同

sleep() 只能在指定时间结束后自动唤醒,或者被中断(interrupt)提前唤醒。
wait() 必须由另一个线程调用同一个对象的 notify()notifyAll() 方法才能唤醒。

4. 使用环境限制

sleep() 可以在任何地方使用,不需要在 synchronized 块中。
wait() 必须在 synchronized 方法或代码块中调用,否则会抛出 IllegalMonitorStateException

基本上就这些。简单说:sleep 是“睡一会儿”,不放锁;wait 是“等通知”,要放锁,等别人叫你起来。

暂无评论

发送评论 编辑评论


				
上一篇
下一篇
text=ZqhQzanResources