我正在製作一些虛擬程序來了解這個java類。 我的定時任務調用了一個任務,在中斷它3秒之前不做任何事情。 下面的代碼:FutureTask似乎沒有中斷
FutureTask<Integer> task = new FutureTask<>(new
Callable<Integer>(){
@Override
public Integer call() throws Exception {
int i =0;
while(i<100000){
;
}
return 0;
}
});
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); //here i cancel the thread
System.out.println("the task has timed out "+result);
}
什麼情況是,catch塊被執行,但我的程序繼續工作,直到線程結束。這就像task.cancel沒有被接受。這是爲什麼?
嗯......問題在於,對於我的真實程序,我需要封裝來自jni庫的連接。我已經用這個連接做了同樣的程序,它也不會中斷。有沒有辦法強制線程停止? – Phate
有關更多信息,請參閱上面的修改後的答案 –