sleep vs wait

基础简介

sleep() 方法让当前线程停止运行一段时间,到期自动继续执行。
wait() 方法让线程停止运行,在 notify() 或 notifyAll() 后继续执行。

相同

sleep() 和 wait() 调用都会暂停当前线程并让出 CPU

不同

定义位置不同:sleep() 是线程类(Thread)的方法;wait() 是顶级类 Object 的方法;

调用地方不同:sleep 方法可以在任何地方使用;wait 方法则只能在同步方法或同步块中使用;

锁资源释放方式不同:sleep 方法只让出了CPU,没有释放同步资源锁! wait方法则是指当前线程让自己暂时退让出同步资源锁,以便其他正在等待该资源的线程得到该资源进而运行,只有调用了notify方法,之前调用wait()的线程才会解除wait状态,可以去参与竞争同步资源锁,进而得到执行。

恢复方式不同:sleep调用后停止运行期间仍持有同步锁,所以到时间会继续执行;wait调用会放弃对象锁,进入等待队列,待调用notify()/notifyAll()唤醒指定的线程或者所有线程,才会进入锁池,再次获得对象锁后才会进入运行状态,在没有获取对象锁之前不会继续执行;

异常捕获:sleep需要捕获或者抛出异常,而wait/notify/notifyAll则不需要。

posted @ 2021-11-26 21:48  Oh,mydream!  阅读(24)  评论(0编辑  收藏  举报