java线程的sleep和wait的区别
时间: 2024-05-13 07:17:55 浏览: 106
Java中的`sleep()`方法和`wait()`方法都可以暂停线程的执行,但是它们的使用场景和作用是不同的。
1. `sleep()`方法
`sleep()`方法是Thread类中的静态方法,可以让当前线程暂停执行一段时间,这个时间是通过指定一个毫秒数来实现的。例如:
```
try {
Thread.sleep(1000); //暂停1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
```
使用`sleep()`方法时,线程会暂停执行指定的时间,然后自动恢复执行。`sleep()`方法不会释放锁,即使线程持有某个对象的锁,也不会释放该锁。
2. `wait()`方法
`wait()`方法是Object类中的实例方法,它可以让当前线程暂停执行,等待其他线程通知它继续执行。在调用`wait()`方法之前,线程必须先获得该对象的锁,否则会抛出`IllegalMonitorStateException`异常。
`wait()`方法的调用会释放当前线程持有的对象锁,并进入该对象的等待队列中,直到其他线程调用该对象的`notify()`或`notifyAll()`方法来唤醒该线程。
```
synchronized (obj) {
try {
obj.wait(); //暂停,并释放obj对象的锁
} catch (InterruptedException e) {
e.printStackTrace();
}
}
```
总结:
- `sleep()`方法是Thread类中的静态方法,可以让线程暂停执行一段时间,不会释放锁。
- `wait()`方法是Object类中的实例方法,可以让线程暂停执行,等待其他线程通知它继续执行,会释放锁。
阅读全文