在Java中,wait()
方法可以与synchronized
关键字和Object.notify()
或Object.notifyAll()
方法一起使用来实现线程间的通信。当你想要让一个线程等待一段时间,然后再继续执行时,可以使用wait(long timeout)
方法进行超时等待。
以下是一个简单的示例,展示了如何使用wait(long timeout)
方法进行超时等待:
public class TimeoutWaitExample { public static void main(String[] args) { final Object lock = new Object(); Thread t1 = new Thread(() -> { synchronized (lock) { System.out.println("Thread 1: Waiting for 5 seconds..."); try { // 等待5秒,然后继续执行 lock.wait(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread 1: Time's up! Continuing execution."); } }); Thread t2 = new Thread(() -> { synchronized (lock) { System.out.println("Thread 2: Notifying Thread 1..."); lock.notify(); } }); t1.start(); t2.start(); } }
在这个示例中,我们创建了两个线程t1
和t2
。线程t1
使用wait(5000)
方法等待5秒,然后继续执行。线程t2
在5秒后调用lock.notify()
来唤醒等待的线程t1
。
注意,wait(long timeout)
方法必须在同步块或同步方法中使用,因为它需要持有对象的监视器锁。同时,为了避免虚假唤醒,通常会在循环中调用wait()
方法,并在每次唤醒后再次检查条件是否满足。