3
這是一個非常簡單的代碼:FutureTask保持活躍
FutureTask<Integer> task = new FutureTask<>(new
Callable<Integer>(){
@Override
public Integer call() throws Exception {
int i =0;
while(i<10){
i++;
}
return 0;
}
});
計數10,然後退出......容易。
我執行這樣的:
Executor executor = Executors.newCachedThreadPool();
executor.execute(task);
try {
task.get(3000, TimeUnit.MILLISECONDS);
System.out.println("Everything was ok");
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TimeoutException ex){
boolean result = task.cancel(true);
System.out.println("the task has timed out "+result);
}
我得到「一切正常」到控制檯,因此任務正確執行並返回。 但是線程仍然存在!我可以通過在eclipse中執行它來看到它:標記正在執行的程序的紅色方塊仍處於活動狀態。 但我的主要關閉後打印「一切正常」,所以它一定是那個任務。 爲什麼它不關閉?我怎樣才能關閉它?
我看到一些ExecutorService類的例子,它有一個關閉方法,但我不想關閉整個線程池,因爲我仍然需要它活動接受其他任務,我只想要關閉任務!