在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()
方法,并在每次唤醒后再次检查条件是否满足。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>