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💖点点关注,收藏不迷路💖
  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Seal^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值