在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秒的超时时间,如果在这个时间内条件没有满足,线程将退出等待。请注意,这个示例仅用于演示目的,实际应用中可能需要根据具体需求进行调整。