在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()
来唤醒它。