2
我有這個令人沮喪的問題:我想查看是否在下面的代碼中引發TimeoutException,但是這不會發生。它總是打印當前時間5次並完成。如何使用FutureTask處理超時?
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();
}
}
}
我使用Thread.sleep(1000)
使得call()
方法需要至少5秒(因爲它是使用for循環進行5次)。我通過設置超時值1秒來呼叫get()
方法。
但爲什麼不拋出TimeoutException?
這可能是How do I get FutureTask to return after TimeoutException?
可能重複的,但如果並欣賞有人能夠幫助,因爲這是很無奈。或者我不明白如何使用FutureTask來處理超時?
你能指導我一個例子如何解決這個使用Executor?對不起,但我是java.util.concurrent包的新手。 – ParagJ
@ParagJ - 更新回答 – jtahlborn
非常感謝您的信息。我用Executor運行它,它運行得非常好。謝謝。 – ParagJ