sleep()和wait()的区别

前言

wait()方法被应用与条件队列,通常与notifyAll()方法组合使用,wait()方法会使不满足状态的线程进入等待池等待,sleep()方法也会让线程休眠,那么两者的区别是什么。在参阅的相关资料后做出一下总结。

所属类的不用

sleep()是Thread类的方法,wait()是Object的方法。

调用条件

没有前提条件,线程可以随时调用。

线程在调用wait()方法之前必须先获得wait()方法所在对象的锁

调用后的效果

调用sleep()方法的线程不会释放锁

调用wait()方法后释放对应的锁并使调用线程进入等待池等待。

唤醒条件

调用 sleep(100L)的线程会在休眠100毫秒后被唤醒。

调用wait(100L)的线程会进入等待池中等待,但线程在100毫秒后还要等待os调用分配资源,所以wait(100L)的停止运行时间是不确定的。wait()方法一般不会设定等待时间,而是由其他线程获得对应对象的锁后调用notify()或notifyAll()方法唤醒并重新尝试获得对应对象的锁。

是否让出CPU时间片

sleep(100L)是占用cpu,线程休眠100毫秒,其他进程不能再占用cpu资源。

调用wait()的线程进入等待池中等待,交出cpu等系统资源供其他进程使用。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容