在 Android 中,wait()
和 notify()
/notifyAll()
是用于線程間通信的同步方法
確保對象已初始化:在調用 wait()
之前,確保對象引用不是 null
。否則,將拋出 NullPointerException
。
鎖定對象:在調用 wait()
之前,使用對象的 synchronized
方法或代碼塊來鎖定對象。這樣可以確保只有一個線程可以進入臨界區。
檢查條件:在調用 wait()
之前,檢查是否滿足等待的條件。如果不滿足條件,線程將立即退出 wait()
,繼續執行其他操作。
釋放鎖:當線程被喚醒時,它需要重新獲取對象的鎖才能繼續執行。在 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
語句來檢查條件,以防止虛假喚醒。