我有這種奇怪的行爲。儘管我設定了強制終止它的時間,但我的程序仍然掛起。任何人都可以指出這種奇怪的行爲可能是什麼?程序掛起,線程不會終止
這裏是我的代碼,我開始線程
protected void pendingTaskStarter() throws Exception {
ExecutorService service = Executors.newFixedThreadPool(maxThreadNum);
ArrayList<Future<Runnable>> futures = new ArrayList<Future<Runnable>>();
System.out.println("max thread num: " + maxThreadNum);
for(int i=0;i<maxThreadNum;i++){
Thread t = new PendingTaskConsumer();
Future<?> f=service.submit(t);
futures.add((Future<Runnable>) f);
}
for (Future<?> future:futures) {
future.get(5l,TimeUnit.MINUTES); // maximum thread's life is 5min (5l <-- 5 in long)
}
service.shutdownNow();
}
我100%肯定,我的計劃基於PendingTaskConsumer
類中的輸出在PendingTaskConsumer
類的地方掛起。
無論如何代碼PendingTaskConsumer應該是無關的,因爲線程被認爲是被迫終止。 我的問題是在什麼情景下,下面的行不按預期做。
future.get(5l,TimeUnit.MINUTES);
該程序在Linux(Ubuntu)
運行並使用openjdk-7-jdk backage (version 1.7)
程序預計運行多長時間?你等了多久才能完成? – 2015-03-13 13:33:27
我在這層上面有一個API,如果這個程序在20分鐘內沒有終止,那麼它會重啓運行這個程序的機器 – nafas 2015-03-13 13:34:39
(1)爲什麼'PendingTaskConsumer'從'Thread'派生?它不是線程,而是由'ExecutorService'維護的ANOTHER線程執行的任務。 (2)是PendingTaskConsumer()方法調用?如果不是,則probalby缺少'new'關鍵字。 – isnot2bad 2015-03-13 20:12:16