sleep()和wait()的区别

169 阅读1分钟

前言

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等系统资源供其他进程使用。