我有这个令人沮丧的问题:我试图看看是否在下面的代码中抛出了TimeoutException,但这种情况不会发生.它总是打印当前时间5次并完成.
class MyTask1 implements Callable<Void> {
public Void call() throws Exception {
for (int i=0; i < 5; i++) {
System.out.println(new java.util.Date());
Thread.sleep(1000);
}
return null;
}
}
public class Timeout {
public static void main(String[] args) throws Exception {
FutureTask<Void> futureTask = new FutureTask<Void>(new MyTask1());
futureTask.run();
try {
futureTask.get(1000, TimeUnit.MILLISECONDS); // Check if FutureTask completed in the given time
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
futureTask.cancel(true);
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Thread.sleep(1000)该call()方法需要至少5秒(因为它使用for循环完成5次).我get()通过设置超时值1秒来调用方法.
但为什么不抛出TimeoutException呢?
这可能是一个可能的副本如何在TimeoutException之后让FutureTask返回?
但是,如果有人可以提供帮助,那就非常令人沮丧.或者我不明白如何使用FutureTask来处理超时?
| 归档时间: |
|
| 查看次数: |
2448 次 |
| 最近记录: |