面试对于每个人来说都是必不可少的一条路,而关于sleep和wait的一些区别我们也是有必要做深入研究的。今天写一遍文章简单说明一下sleep和wait的区别。
1、方法所属的对象不同
我们可以通过查看sleep和wait的源码可以看到两者的附属不同。
sleep是属于Thread线程类的方法。
而wait是Object类的方法
2、可调用方法的位置不同
sleep方法可以不在synchronized块的方法内进行调用,而wait必须在synchronized的块内方法调用。
3、使用该方法之后对象的锁状态不同
sleep在调用之后,会停止该线程执行,让其余线程进行执行,但是该线程占用的对象锁并不会释放,我们可以形象的记忆为抱着锁睡觉。还需要值得注意的是在睡觉的这段时间里jvm并不会停止对该线程的监控状态。即指定的时间到了之后会立即恢复到执行状态。
而wait调用之后,会将锁释放,然后进入等待此对象执行的等待池,等待该对象的notify方法调用进行唤醒之后才能重新进入该对象锁定池中准备获取该对象的锁进入执行状态。
如果错误,欢迎指出!谢谢。