Java中的wait( )和sleep( )方法的区别
一、前言
- Java中的wait( )和sleep( )方法都用于暂停线程的操作,但两者在相关特点和使用场景却有明显的区别。
二、关键区别说明
- 锁释放机制:
- wait()会释放对象锁;
- 而sleep()仅让出CPU资源,不释放锁。
- 使用场景:
- wait()用于线程间通信(如等待条件触发),常用于synchronized修饰的同步代码块;
- sleep()用于暂停线程执行,无使用场景限制。
- 同步要求:
- wait()必须在synchronized代码块中调用,否则将抛出IllegalMonitorStateException异常;
- sleep()无此限制。
- 唤醒方式:
- wait()依赖其他线程主动唤醒;
- 而sleep()自动恢复。
三、代码示例
// wait()示例(需同步)
synchronized (lock) {
while (conditionNotMet) {
lock.wait(); // 释放锁并等待唤醒
}
}
// sleep()示例
Thread.sleep(1000); // 暂停当前线程1秒,不释放锁
四、总结
- 建议根据具体场景选择:需线程协作时用wait(),单纯暂停线程用sleep()。