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