wait()
方法是 Java 多線程編程中的一個重要方法,主要用于讓當前線程等待,直到其他線程調用同一個對象的 notify()
或 notifyAll()
方法。wait()
方法必須在同步代碼塊或同步方法中使用,否則會拋出 IllegalMonitorStateException
異常。
以下是一個簡單的示例,展示了如何在多線程中使用 wait()
和 notify()
方法:
public class WaitNotifyExample {
private static final Object lock = new Object();
private static boolean messageReady = false;
public static void main(String[] args) {
Thread producer = new Thread(new Producer());
Thread consumer = new Thread(new Consumer());
producer.start();
consumer.start();
}
static class Producer implements Runnable {
@Override
public void run() {
synchronized (lock) {
System.out.println("生產者生產了一條消息");
messageReady = true;
lock.notify(); // 通知消費者消息已準備好
}
}
}
static class Consumer implements Runnable {
@Override
public void run() {
synchronized (lock) {
try {
while (!messageReady) {
System.out.println("消費者等待消息...");
lock.wait(); // 等待生產者通知消息已準備好
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("消費者消費了消息");
}
}
}
}
在這個示例中,我們有兩個線程:一個生產者線程和一個消費者線程。生產者線程生產了一條消息并將其設置為 true
,然后調用 lock.notify()
通知消費者線程消息已準備好。消費者線程在一個循環中等待消息,如果消息未準備好,則調用 lock.wait()
進入等待狀態。當生產者線程通知消息已準備好時,消費者線程將退出循環并消費消息。
請注意,wait()
和 notify()
方法必須在同步代碼塊或同步方法中使用,以確保線程安全。在這個示例中,我們使用了一個名為 lock
的對象作為鎖。