如何答?
基本的差别
sleep是Thread类的方法,wait是Object类的方法
sleep方法可以在任何地方使用,wait只能在synchronized方法或synchronized块中使用
最主要的本质区别
Thread.sleep只会让出CPU,不会释放对象锁
Object.wait不仅让出CPU,还会释放对象锁。只有针对此对象调用notify()方法或者时间到了,才能再次执行
代码演示
去掉了try catch部分,方便大家迅速理解
输出为
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才拿到锁
我们将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获得了