java中的notify方法
时间: 2024-05-08 11:22:35 浏览: 12
Java中的`notify()`方法是用于唤醒正在等待(通过调用`wait()`方法)该对象锁的线程之一。如果有多个线程在等待该对象锁,则唤醒其中一个线程是不确定的,具体唤醒哪个线程由JVM决定。`notify()`方法必须在同步代码块内部调用,否则会抛出IllegalMonitorStateException异常。
示例代码:
```java
public class MyThread extends Thread {
private final Object lock;
public MyThread(Object lock) {
this.lock = lock;
}
public void run() {
synchronized(lock) {
System.out.println("线程" + Thread.currentThread().getName() + "开始等待");
try {
lock.wait(); // 等待唤醒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程" + Thread.currentThread().getName() + "被唤醒");
}
}
}
public class Test {
public static void main(String[] args) {
Object lock = new Object();
MyThread t1 = new MyThread(lock);
MyThread t2 = new MyThread(lock);
t1.start();
t2.start();
try {
Thread.sleep(1000); // 等待1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(lock) {
lock.notify(); // 唤醒线程
}
}
}
```
在上面的例子中,创建了两个线程t1和t2,并且它们都在等待lock对象的锁,主线程等待1秒后调用`lock.notify()`方法唤醒一个线程,这时会有一个线程被唤醒并执行后面的代码。注意,如果没有调用`lock.notify()`方法,则线程将一直处于等待状态。