当使用ExecutorService
和Future
对象(提交时Runnable
任务),如果我指定超时值,未来的get函数,并当一个潜在的线程被杀TimeoutException
被抛出?
Answer 1:
它不是。 为什么会产生呢? 除非你告诉它。
有一个非常有效的可赎回例如情况在这里关注。 如果你在等待结果的说20秒,你没有得到它,那么你不感兴趣的结果了。 在那个时候,你应该在所有的取消任务。
事情是这样的:
Future<?> future = service.submit(new MyCallable());
try {
future.get(100, TimeUnit.MILLISECONDS);
} catch (Exception e){
e.printStackTrace();
future.cancel(true); //this method will stop the running underlying task
}
Answer 2:
没有它不。 Morover甚至有没有试图中断的任务。 先用超时所有的Future.get不会这么说。 其次,试试我的测试,看看它是如何表现
ExecutorService ex = Executors.newSingleThreadExecutor();
Future<?> f = ex.submit(new Runnable() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("finished");
}
});
f.get(1, TimeUnit.SECONDS);
在1秒它打印
Exception in thread "main" java.util.concurrent.TimeoutException
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228)
at java.util.concurrent.FutureTask.get(FutureTask.java:91)
at Test1.main(Test1.java:23)
接连1秒任务successfullt完成
finished
Answer 3:
看来你需要杀死,明确取消或关闭任务
从Java的ExecutorService任务处理异常
我如何获得FutureTask提供TimeoutException异常后恢复?
文章来源: Does a Future timeout kill the Thread execution