溫馨提示×

Android中wait和notify配合使用

小樊
135
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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女