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
的对象作为锁。