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则不需要。