android

Android中wait和notify配合使用

小樊
89
2024-12-05 02:30:21
栏目: 编程语言

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

0
看了该问题的人还看了