溫馨提示×

如何正確在Android中使用wait

小樊
107
2024-12-05 02:27:19
欄目: 編程語言

在 Android 中,wait()notify()/notifyAll() 是用于線程間通信的同步方法

  1. 確保對象已初始化:在調用 wait() 之前,確保對象引用不是 null。否則,將拋出 NullPointerException。

  2. 鎖定對象:在調用 wait() 之前,使用對象的 synchronized 方法或代碼塊來鎖定對象。這樣可以確保只有一個線程可以進入臨界區。

  3. 檢查條件:在調用 wait() 之前,檢查是否滿足等待的條件。如果不滿足條件,線程將立即退出 wait(),繼續執行其他操作。

  4. 釋放鎖:當線程被喚醒時,它需要重新獲取對象的鎖才能繼續執行。在 finally 代碼塊中調用 notify()notifyAll() 之后,確保釋放鎖。

以下是一個簡單的示例:

public class Example {
    private final Object lock = new Object();
    private boolean condition = false;

    public void waitForCondition() throws InterruptedException {
        synchronized (lock) {
            while (!condition) { // 檢查條件
                lock.wait(); // 等待
            }
            // 條件滿足,繼續執行
        }
    }

    public void changeCondition() {
        synchronized (lock) {
            condition = true; // 修改條件
            lock.notify(); // 喚醒等待的線程
        }
    }
}

在這個示例中,waitForCondition() 方法會等待 condition 變量變為 true。changeCondition() 方法會修改 condition 變量的值并喚醒等待的線程。注意,這里使用了 while 循環而不是 if 語句來檢查條件,以防止虛假喚醒。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女