java中sleep方法和wait方法的区别
时间: 2023-10-06 20:10:53 浏览: 130
详解Java中的sleep()和wait()的区别
Java中的`sleep()`方法和`wait()`方法都可以暂停当前线程,但它们的作用和使用方式不同。
1. `sleep()`方法
`sleep()`方法是Thread类中的静态方法,用于暂停当前正在执行的线程,让其它线程有机会继续执行。使用`sleep()`方法时,线程不会释放持有的锁。`sleep()`方法的语法如下:
```java
public static void sleep(long millis) throws InterruptedException
```
其中,`millis`参数表示要暂停的时间,单位是毫秒。`sleep()`方法可能会抛出`InterruptedException`异常。
2. `wait()`方法
`wait()`方法是Object类中的方法,用于线程间的通信(即线程间的协作)。使用`wait()`方法时,线程会释放持有的锁,并进入等待状态,直到其它线程调用相同对象上的`notify()`或`notifyAll()`方法唤醒它。`wait()`方法的语法如下:
```java
public final void wait() throws InterruptedException
```
`wait()`方法还有另外一个版本,它允许设置等待时间:
```java
public final native void wait(long timeout) throws InterruptedException;
```
其中,`timeout`参数表示等待的时间,单位是毫秒。
因此,`sleep()`方法是让线程等待一段时间后自动恢复执行,而`wait()`方法是让线程等待其它线程的通知后再恢复执行。另外,使用`wait()`方法时,必须在`synchronized`块内调用,以确保线程安全。
阅读全文