在Android中,wait()
和notify()
是Object
类的两个方法,主要用于多线程编程中的线程间通信。这两个方法必须在同步代码块或同步方法中使用,否则会抛出IllegalMonitorStateException
异常。
wait()
方法会使当前线程等待,直到其他线程调用同一个对象的notify()
方法。当线程调用wait()
方法时,它会释放对象的锁,进入等待状态。当其他线程调用同一个对象的notify()
方法时,等待状态的线程会被唤醒,重新尝试获取对象的锁。如果成功获取到锁,线程会继续执行。
下面是一个简单的示例:
public class WaitNotifyExample { private static final Object lock = new Object(); private static boolean isDataReady = 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) { try { System.out.println("生产者生产数据中..."); Thread.sleep(3000); // 模拟生产数据需要一定时间 isDataReady = true; System.out.println("生产者生产数据完成,通知消费者..."); lock.notify(); } catch (InterruptedException e) { e.printStackTrace(); } } } } static class Consumer implements Runnable { @Override public void run() { synchronized (lock) { try { System.out.println("消费者等待数据..."); lock.wait(); System.out.println("消费者获取到数据,开始处理..."); Thread.sleep(2000); // 模拟处理数据需要一定时间 System.out.println("数据处理完成"); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
在这个示例中,我们创建了一个生产者线程和一个消费者线程。生产者线程负责生产数据,消费者线程负责处理数据。当生产者线程生产完数据后,它会调用lock.notify()
来唤醒等待状态的消费者线程。消费者线程在调用lock.wait()
后会进入等待状态,直到生产者线程调用lock.notify()
来唤醒它。