qt非thread使用sleep_面试官:同样是等待,sleep和wait有哪些区别

7fde54c5bb7ab2ee94d550898168af94.png

如何答?

基本的差别

sleep是Thread类的方法,wait是Object类的方法

sleep方法可以在任何地方使用,wait只能在synchronized方法或synchronized块中使用

最主要的本质区别

Thread.sleep只会让出CPU,不会释放对象锁

Object.wait不仅让出CPU,还会释放对象锁。只有针对此对象调用notify()方法或者时间到了,才能再次执行

代码演示

去掉了try catch部分,方便大家迅速理解

5b58aa033f1d821e48988b4652e3b58e.png

输出为

Thread A is waiting to get lock

Thread A get lock

Thread B is waiting to get lock

Thread A is done

Thread B get lock

Thread B is done

由输出可以看到Thread.sleep不会释放锁,因为A完成了B才拿到锁

62b9cb640c2a1bdf9f7b7520a390281a.png

我们将sleep和wait换一下,输出为

Thread A is waiting to get lock

Thread A get lock

Thread B is waiting to get lock

Thread B get lock

Thread B is done

Thread A is done

可以看到Object.wait会释放锁,因为A还没有执行完,锁就被B获得了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值