java的wait()方法
时间: 2024-06-01 16:13:24 浏览: 8
Java中的wait()方法用于使当前线程进入等待状态,直到其他线程调用该对象的notify()或notifyAll()方法,或者超时时间到达。
wait()方法必须在synchronized块或方法内部使用,否则会抛出IllegalMonitorStateException异常。
它有三种重载形式:
1. void wait():无限期等待直到其他线程唤醒
2. void wait(long timeout):等待指定的毫秒数再进入运行状态
3. void wait(long timeout, int nanos):等待指定的毫秒数和纳秒数再进入运行状态。
相关问题
java wait代码举例
以下是一个简单的 Java wait() 示例:
```java
public class WaitExample {
public static void main(String[] args) {
final Object lock = new Object();
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (lock) {
try {
System.out.println("Thread 1 is waiting...");
lock.wait(); // 线程1等待
System.out.println("Thread 1 is awake!");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (lock) {
try {
System.out.println("Thread 2 is sleeping...");
Thread.sleep(5000); // 线程2睡眠5秒
lock.notify(); // 线程2唤醒线程1
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread1.start();
thread2.start();
}
}
```
在这个示例中,我们创建了两个线程,其中一个线程等待锁,另一个线程在锁上调用 notify() 方法来唤醒等待线程。注意,wait() 和 notify() 方法必须在同步代码块中调用,因为它们依赖于对象的监视器锁。
java线程wait
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中线程等待的基本概念和用法,希望对你有所帮助!如果有更多问题,请随时提问。