基础简介
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则不需要。