# 23. Thread.sleep() 和 Object.wait() 区别分析
# 标准答案
✅ Thread.sleep()
是一个静态方法,用于让当前线程暂停执行一段时间,不释放锁。Object.wait()
是一个实例方法,用于让当前线程等待,释放锁以便其他线程可以获取锁。
# 答案解析
# 1️⃣ Thread.sleep()的特点
- 暂停执行:
sleep()
让当前线程暂停执行一段时间。 - 不释放锁:
sleep()
不释放锁,线程仍然持有锁。
# 2️⃣ Object.wait()的特点
- 等待:
wait()
让当前线程等待,直到被唤醒。 - 释放锁:
wait()
释放锁,以便其他线程可以获取锁。
# 常见误区
- ❌ 误区1:认为
sleep()
释放锁。实际上,sleep()
不释放锁。 - ❌ 误区2:忽视
wait()
的锁释放。wait()
释放锁以便其他线程获取。
方法 | 描述 | 适用场景 |
---|---|---|
sleep() | 暂停执行,不释放锁 | 需要暂停执行的场景 |
wait() | 等待,释放锁 | 需要等待和同步的场景 |
# 3️⃣ 典型场景与解决方案
# ✅ 适合使用sleep()的场景
- 定时任务
- 使用
sleep()
实现定时任务。
- 使用
# ❌ 不能用sleep()解决的场景
- 线程同步
- 需要线程同步和等待的场景。
# 4️⃣ 底层原理解析
# 1. sleep()的实现
sleep()
通过JVM调用操作系统的线程调度器实现。
# 2. wait()的实现
wait()
通过JVM的监视器锁实现,释放锁以便其他线程获取。
# 企业真实场景问题分析
# Situation(业务背景)
在某高并发系统中,需要暂停执行和线程同步。
# Task(核心任务 & 关键挑战)
- 如何暂停执行和线程同步?
- 如何在保证安全的同时提高性能?
# Action(技术方案 & 逐步拆解)
- 方案1:使用sleep()
- 实现定时任务。
- 方案2:使用wait()
- 实现线程同步。
# Result(结果分析)
- 使用sleep()可以实现定时任务。
- 使用wait()可以实现线程同步。
# 深入追问
🔹 如何暂停执行和线程同步?
- 通过sleep()和wait()实现。
🔹 sleep()与wait()的区别是什么?
- sleep()暂停执行不释放锁,wait()等待并释放锁。
# 相关面试题
- 如何暂停执行和线程同步?
- sleep()与wait()的区别是什么?
- 为什么sleep()不释放锁?