温馨提示×

java wait方法如何设置超时

小樊
82
2024-11-26 19:42:28
栏目: 编程语言

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

0