Wait 与 Sleep 的区别:深入理解Java并发控制
💖The Begin💖点点关注,收藏不迷路💖
|
在Java的并发编程中,wait()
和 sleep()
是两个关键但易混淆的方法。它们虽都能暂停线程,但在用途、实现机制及锁处理上截然不同。
一、Wait 方法
1.1 定义与所属类
- 定义:
wait()
是java.lang.Object
的方法,所有Java类都继承。 - 用途:用于线程间通信,非暂停线程本身。
1.2 锁机制
- 当线程调用某对象的
wait()
时,会释放该对象的锁并进入等待队列。
1.3 唤醒机制
- 需其他线程调用该对象的
notify()
或notifyAll()
来唤醒。
1.4 使用场景
- 生产者-消费者问题、条件等待等。
二、Sleep 方法
2.1 定义与所属类
- 定义:
sleep()
是java.lang.Thread
的静态方法。 - 用途:暂停当前线程一段时间。
2.2 锁机制
- 不会释放当前线程持有的任何锁。
2.3 唤醒机制
- 无需其他线程唤醒,指定时间后自动恢复。
2.4 使用场景
- 模拟时间流逝、降低执行速度、迭代间短暂延迟。
三、总结
- 所属类:
wait()
(Object)、sleep()
(Thread) - 锁机制:
wait()
释放锁,sleep()
不释放锁 - 唤醒机制:
wait()
需notify()
/notifyAll()
,sleep()
自动唤醒 - 使用场景:
wait()
用于线程间通信,sleep()
用于暂停执行
💖The End💖点点关注,收藏不迷路💖
|