java线程wait
时间: 2023-11-24 17:14:40 浏览: 65
Java中的线程等待(wait)是一种用于线程间同步的机制。当一个线程调用对象的`wait()`方法时,它会释放该对象上的锁,并且进入等待状态,直到其他线程通过调用相同对象上的`notify()`或`notifyAll()`方法来唤醒它。
`wait()`方法必须在同步代码块或同步方法中使用,因为它要求线程先获得对象的锁才能调用。当线程调用`wait()`方法后,它会释放持有的锁,其他线程可以访问该对象并执行同步代码块或同步方法。当线程被唤醒后,它会重新尝试获得锁,并继续执行。
下面是一个简单的示例代码,演示了如何使用`wait()`和`notify()`方法实现线程等待:
```java
class MyRunnable implements Runnable {
private final Object lock;
public MyRunnable(Object lock) {
this.lock = lock;
}
@Override
public void run() {
synchronized (lock) {
try {
System.out.println("Thread waiting...");
lock.wait(); // 线程等待
System.out.println("Thread resumed!");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
Object lock = new Object();
Thread thread = new Thread(new MyRunnable(lock));
thread.start();
// 主线程等待一段时间后唤醒等待的线程
Thread.sleep(2000);
synchronized (lock) {
lock.notify(); // 唤醒等待的线程
}
}
}
```
在这个示例中,线程通过调用`lock.wait()`方法进入等待状态,并且在主线程中通过调用`lock.notify()`方法将其唤醒。注意,`wait()`和`notify()`方法必须在同步代码块(这里是`synchronized (lock)`)中使用。
请注意,线程在被唤醒后,并不会立即执行,而是需要重新竞争锁资源。因此,在`notify()`方法调用之后,等待的线程可能不会立即继续执行,而是需要等待其他线程释放锁才能执行。
这是Java中线程等待的基本概念和用法,希望对你有所帮助!如果有更多问题,请随时提问。
阅读全文