在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()來喚醒它。