wait和sleep的区别
- sleep是Thread的静态方法,wait是Obejct的方法,任何对象实例都能调用 (因为 sleep 是让当前线程休眠,不涉及到对象类,也不需要获得对象的锁,所以是线程类的方法。wait 是让获得对象锁的线程实现等待,前提是要获得对象的锁,所以是类的方法)
- sleep不会释放锁,也不需要占用锁.wait会释放锁,调用前提是当前线程占用锁
- 它们都可以被interrupted方法中断
- sleep 一般用于当前线程休眠,或者轮循暂停操作,wait 则多用于多线程之间的通信。
try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock){
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}