Java多线程中调用wait() 和 sleep()方法有什么不同?
本篇内容为中的部分内容。
二者区别
sleep()和wait()都是使线程暂停执行一段时间的方法。
1)原理不同
sleep()方法是Thread类中的一个静态方法,是线程用来控制自身流程的。
wait()方法是Object类中的方法,用于线程间的通信。
2)对锁的处理机制不同
线程调用共享对象的wait()方法后会释放当前共享变量持有的锁。
调用sleep()方法的线程不会释放当前持有的锁。
3)使用地方不同
sleep方法则可以放在任何地方使用,而wait()方法必须放在同步方法或者同步代码块中使用。
4)异常处理
sleep()方法必须捕获异常,而wait()、notify()、notifyAll()不需要捕获异常。
补充说明:
(1)由于sleep不会释放锁标志,容易导致死锁问题的发生,一般情况下,不推荐使用sleep()方法,而推荐使用wait()方法。
(2)如果调用wait()方法的线程没有事先获取该对象的监视器锁,则调用wait()方法时调用 线程会抛出IllegalMonitorStateException异常。
实例
待补充