# 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()的场景

  1. 定时任务
    • 使用sleep()实现定时任务。

# ❌ 不能用sleep()解决的场景

  1. 线程同步
    • 需要线程同步和等待的场景。

# 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()等待并释放锁。

# 相关面试题

  1. 如何暂停执行和线程同步?
  2. sleep()与wait()的区别是什么?
  3. 为什么sleep()不释放锁?