在Java中,wait()
方法可以與synchronized
關鍵字和Object.notify()
或Object.notifyAll()
方法一起使用,以便在等待某個條件滿足時喚醒線程。為了設置超時,您可以使用Thread.sleep()
方法在循環中檢查條件是否滿足。以下是一個示例:
public class WaitWithTimeoutExample {
private static final Object lock = new Object();
private static boolean conditionMet = false;
public static void main(String[] args) {
Thread thread = new Thread(() -> {
synchronized (lock) {
try {
System.out.println("Waiting for condition to be met...");
while (!conditionMet) { // 使用循環檢查條件是否滿足
lock.wait(1000); // 設置超時時間為1000毫秒(1秒)
}
System.out.println("Condition is met. Exiting thread.");
} catch (InterruptedException e) {
System.out.println("Thread was interrupted.");
}
}
});
thread.start();
try {
Thread.sleep(2000); // 讓主線程等待2秒,以便子線程有機會執行
} catch (InterruptedException e) {
System.out.println("Main thread was interrupted.");
}
synchronized (lock) {
conditionMet = true; // 設置條件以滿足
lock.notify(); // 喚醒等待的線程
}
}
}
在這個示例中,我們設置了一個1秒的超時時間,如果在這個時間內條件沒有滿足,線程將退出等待。請注意,這個示例僅用于演示目的,實際應用中可能需要根據具體需求進行調整。