JAVA --- sleep 和 wait 的区别?

Thread类的sleep方法和对象的wait方法都可以让线程暂停执行,但它们在实现机制和使用场景上有显著的区别。
sleep方法是Thread类的静态方法,作用于当前正在执行的线程,不会释放锁,时间到了自动唤醒,通常用于简单的定时任务。而wait方法是Object类的方法,作用于调用该方法的对象,会释放锁,需要其他线程调用notifynotifyAll来唤醒,通常用于线程间的同步和通信。

以下是它们的详细对比:

Thread.sleep 方法

  1. 作用对象

    • sleep方法是Thread类的静态方法,作用于当前正在执行的线程。
  2. 锁行为

    • sleep方法不会释放任何锁或监视器。线程在睡眠期间仍然持有它所获得的锁。
  3. 唤醒条件

    • sleep方法在指定的时间后自动唤醒。线程睡眠的时间是确定的,除非被中断。
  4. 使用场景

    • sleep方法通常用于简单的定时任务,比如延迟执行某个操作。

Object.wait 方法

  1. 作用对象

    • wait方法是Object类的方法,作用于调用该方法的对象。
  2. 锁行为

    • wait方法会释放调用该方法的对象的锁(监视器)。线程在等待期间不持有该对象的锁。
  3. 唤醒条件

    • wait方法需要通过另一个线程调用相同对象的notifynotifyAll方法来唤醒。唤醒的条件是其他线程通知,而不是时间。
  4. 使用场景

    • wait方法通常用于线程间的同步和通信,比如生产者-消费者问题。

示例代码

Thread.sleep 示例
public class SleepExample {
   
    public static void main(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

需要重新演唱

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

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

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

打赏作者

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

抵扣说明:

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

余额充值