【JAVA】sleep与wait的区别

35 篇文章 11 订阅

                                    sleep与wait的区别 

了解sleep与wait之间的区别,对于我们编写正确的多线程程序具有十分重要的意义。

 

【1】原理不同

(1)sleep用于线程控制自身的流程,使自己暂停指定的时间,把执行机会让给其他线程,时间到,则自动苏醒。

(2)wait为Object类的方法(Object类中的其他方法见Object类的方法简谈),用于线程之间的通信,会使拥有当前对象锁的线程等待,直到其他线程调用notify或notifyAll方法才醒来。当然也可以指定时间,时间到,则自动醒来。

 

【2】对锁的处理机制不同

(1)sleep不涉及线程之间的通信,调用sleep方法不会释放锁

(2)wait方法,线程会释放掉它所占用的锁,从而使得该线程所在的对象中的synchronized数据被其他线程使用。

 

【3】使用区域不同

(1)sleep方法可以放在任何地方使用,不用加任何限制

(2)wait方法必须放在同步控制方法或者同步语句块中使用

 

【4】异常捕获

(1)sleep方法必须捕获异常,因为在某个线程的sleep过程中,有可能被其他对象调用它的interrupt方法,从而产生InterruptedException异常,因此需要捕获。

(2)wait、notify和notifyAll方法都不需要捕获异常

 

由于sleep方法不会释放对象锁,容易导致死锁问题的产生。因此,在一般的情况下,不推荐使用sleep方法,而推荐使用wait方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SunAlwaysOnline

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

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

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

打赏作者

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

抵扣说明:

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

余额充值