两者区别
- wait()方法时object类的方法 sleep()是Thread类的方法
- sleep()让线程暂停一段时间,时间一到自动恢复执行,不设计线程间的通信 调用sleep()方法不会释放锁。
Wait() 调用后线程会释放占用的锁,用于线程间的通信,只有其他线程调用notify()方法或者notifyall()才醒来 - 使用域不同 wait()方法必须放在同步代码块和同步控制方法中使用,sleep()方法则可以放在任何地方使用
- sleep()方法必须捕获异常 而wait() notify() notifyall() 不需要捕获异常
在sleep过程中 可能被其他对象调用它的interrupt() 产生interruptedException 由于sleep不会释放锁标志 容易导致死锁问题的发生 因此一般情况下 推荐使用wait() 方法.