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