sleep()和wait()有什么区别?
1、sleep()方法是线程类Thread的静态方法,让调用线程进入睡眠状态,让出执行机会给其它线程,等到休眠时间结束后,线程进入就绪状态和其它线程一起竞争CPU执行时间。
因为sleep()是静态的(static修饰的)方法,它不能改变对象的机锁,当一个synchronized块中调用了sleep方法,线程虽然进入休眠状态,但是对象的机锁没有释放,其它线程无法访问这个对象。
2、wait()是Object类的方法,当一个线程执行到wait()方法时,它就进入到一个和该对象相关的等待池,同时释放对象的锁,使用其它线程能够访问,可以通过notify,和notifyAll方法来唤醒等待的线程。
wait()、notify()、notifyAll()只能在同步控制方法或者同步控制块里面使用,而sleep()可以在任何地方使用。
sleep()必须捕获异常,而wait()、notify()、notifyAll()不需要捕获异常。