wait 与 sleep 的区别

本文详细解析了Java中线程的sleep与wait方法的区别。sleep为Thread静态方法,不释放锁;wait为Object方法,释放锁并等待通知。同时介绍了notify与notifyAll的区别。

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

                                   wait 与 sleep 的区别

1.sleep (long time)

​       sleep 为 Thread 的静态方法,使线程进入到睡眠状态,直到 time 时间到达之后,线程被唤醒,线程进入sleep 睡眠时,不会释放所占有的锁对象资源

​      (TimeUnit.MILLISECONDS.sleep();)也可以实现线程沉睡。

2.wait (long time)

​       该方法为 Object 中的方法,同样是使线程进入到睡眠状态,但是该线程的唤醒状态可以分为两种方式:

​       1.当线程沉睡时间到达设定的 time 时间时候,线程自动唤醒;

​       2.当持有相同锁对象的线程执行 notifyAll() 时会被唤醒,执行 notify() 同样也能被唤醒。

​       `notify() 与 notifyAll()`

​        notify() 与 notifyAll() 都是 Object 类的方法。notify() 只能唤醒一条持有相同锁对象且沉睡的线程,而 notifyAll() 可以唤醒全部持有相同锁对象的线程。

​         线程进入 wait(long time) 睡眠时,会释放所占有的锁对象资源。

3.wait()

​         该方法同样是 Object 类中的方法,与 wait(long time) 表现为方法的重载,但是带参数的 wait(long time) 是使线程进入计时睡眠,当没有唤醒线程唤醒时,wait(long time) 会在等待时间 time 到达之后自动被唤醒。而无参wait() 则是无限等待,只可以被其他线程执行 notify() 或 notifyAll() 唤醒。

​         线程进入 wait() 睡眠时,会释放所占有的锁对象资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值