我在探索ExecutorService
時,遇到方法Future.get()
,它接受timeout
。執行程序服務 - 線程超時
這種方法的Java的醫生說
如有必要,等待至多給定的時間計算完成,然後獲取其結果(如果可用)。
參數:
超時的最長等待時間
單元超時參數
按我理解的時間單位,我們正在實行超時callable
,我們提交到ExecutorService
這樣,我的callable
將中斷已超過指定時間(超時)
但根據以下代碼,longMethod()
似乎超出超時(2秒),我真的很困惑理解這一點。任何人都可以請我指出正確的道路?
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Timeout implements Callable<String> {
public void longMethod() {
for(int i=0; i< Integer.MAX_VALUE; i++) {
System.out.println("a");
}
}
@Override
public String call() throws Exception {
longMethod();
return "done";
}
/**
* @param args
*/
public static void main(String[] args) {
ExecutorService service = Executors.newSingleThreadExecutor();
try {
service.submit(new Timeout()).get(2, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
}
}
}
除了答案之外,請注意即使任務被中斷,因爲它永遠不會檢查中斷標誌,它會繼續運行直到結束。 – 2013-04-29 11:17:59