等待超时timeoutexception案例
时间: 2023-12-12 10:04:06 浏览: 186
Java实现任务超时处理方法
下面是一个等待超时(wait timeout)的 TimeoutException 案例。假设我们有一个生产者-消费者模型,在生产者线程中等待消费者线程消费产品,但是如果等待时间超过一定时间,就认为生产者线程等待超时,抛出 TimeoutException 异常。
```java
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class TimeoutExceptionExample {
private final Queue<String> queue = new LinkedList<>();
public synchronized void produce(String value) {
queue.add(value);
notifyAll();
}
public synchronized String consume(long timeout) throws InterruptedException, TimeoutException {
long startTime = System.currentTimeMillis();
while (queue.isEmpty()) {
long elapsedTime = System.currentTimeMillis() - startTime;
long remainingTime = timeout - elapsedTime;
if (remainingTime <= 0) {
throw new TimeoutException("等待超时");
}
wait(remainingTime);
}
return queue.remove();
}
public static void main(String[] args) {
TimeoutExceptionExample example = new TimeoutExceptionExample();
Thread producer = new Thread(() -> {
example.produce("Product 1");
});
Thread consumer = new Thread(() -> {
try {
String product = example.consume(TimeUnit.SECONDS.toMillis(5)); // 等待时间为 5 秒
System.out.println("Consumed product: " + product);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (TimeoutException e) {
System.err.println("TimeoutException: " + e.getMessage());
}
});
producer.start();
consumer.start();
}
}
```
在上面的例子中,我们定义了一个生产者-消费者模型,其中 `produce` 方法用于生产产品,`consume` 方法用于消费产品。在 `consume` 方法中,我们使用 `wait` 方法等待生产者线程生产产品,并设置超时时间为 5 秒。如果等待时间超过 5 秒,就会抛出 TimeoutException 异常。在 `main` 方法中,我们启动了一个生产者线程和一个消费者线程,模拟了生产者-消费者模型的运行过程。
阅读全文