sleep()和wait()的区别

共同点:两者都是暂停线程的执行。

区别

1.sleep()是Thread类的静态方法,被native和static修饰,wait()是Object类的本地方法,被final修饰。

2.使用sleep()方法可以让当前线程休眠,休眠结束后线程继续向下执行,需要捕获线程中断异常,可以在任何地方使用。wait()方法必须放在synchronized块中,并且需要获取对象的锁。wait()方法需要其他线程调用同一对象上的notify()或者nodifyAll()方法来唤醒,也可以使用wait(long timeout)超时后线程自动苏醒。

3.sleep()没有释放锁但是释放了CPU资源,wait()释放了当前线程对对象持有的锁和CPU资源。

4.wait()用于线程间交互通信,sleep()用于当前线程休眠。

为什么wait()不定义在Thread中?

wait()是让获得了对象锁的线程等待,会自动释放当前线程占有的对象锁。要释放当前线程占有的对象锁让其进入WAITING状态,自然要操作对应的对象锁而不是当前的线程。而sleep()是让当前线程暂停执行,不涉及到对象,不需要获取对象锁。

代码示例:

        // sleep让当前线程休眠,可以用在任何地方
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // object对象
        Object object = new Object();

        // wait调用对象的锁
        synchronized (object) {
            try {
                object.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        // 其他线程调用同一对象上的notify方法唤醒
        synchronized (object) {
            // object.notifyAll();
            object.notify();
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

psvm_code

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

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

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

打赏作者

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

抵扣说明:

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

余额充值