sleep和wait的区别?

本文探讨了Java中sleep和wait方法的主要区别。sleep方法属于Thread类,可以在非同步环境中使用,不会释放锁,线程只是暂时休眠。而wait是Object类的方法,必须在同步块内调用,它会释放锁并使线程进入等待状态,等待被其他线程唤醒。了解这些差异对于优化多线程程序至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试对于每个人来说都是必不可少的一条路,而关于sleep和wait的一些区别我们也是有必要做深入研究的。今天写一遍文章简单说明一下sleep和wait的区别。

1、方法所属的对象不同

我们可以通过查看sleep和wait的源码可以看到两者的附属不同。
sleep是属于Thread线程类的方法。
在这里插入图片描述
而wait是Object类的方法在这里插入图片描述

2、可调用方法的位置不同

sleep方法可以不在synchronized块的方法内进行调用,而wait必须在synchronized的块内方法调用。
在这里插入图片描述

3、使用该方法之后对象的锁状态不同

sleep在调用之后,会停止该线程执行,让其余线程进行执行,但是该线程占用的对象锁并不会释放,我们可以形象的记忆为抱着锁睡觉。还需要值得注意的是在睡觉的这段时间里jvm并不会停止对该线程的监控状态。即指定的时间到了之后会立即恢复到执行状态。
在这里插入图片描述

而wait调用之后,会将锁释放,然后进入等待此对象执行的等待池,等待该对象的notify方法调用进行唤醒之后才能重新进入该对象锁定池中准备获取该对象的锁进入执行状态。

如果错误,欢迎指出!谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值