これまでのところ、executorserviceを使った実験では、future.get、次にfuture.cancelを使用してスレッド割り込みをスローすることに関する多くのアドバイスがありました。この割り込みは、スレッドにキャッチされ、そこで処理される必要があります。私の質問は少し異なります。
実行時間の長さを追跡するだけのスレッドを実行していて、しきい値を超えた場合、これはexecutorserviceと実行中のすべてのスレッドを強制終了するための良い方法でしょうか?
思考プロセスの例:
ExecutorService threadPool = Executors.newFixedThreadPool(12);
timekeeper.start();
List<Future<?>> taskList = new ArrayList<Future<?>>();
for (int i = 0; i < objectArray.length; i++) {
Future<?> task = threadPool.submit(new ThreadHandler(objectArray[i], i));
taskList.add(task);
Thread.sleep(500);
}
if(timekeeper.now() > 60)
threadpool.shutdownNow();
}
これは機能しますか?スレッドが非常にまれに失敗するため、確認する方法がありません(約1/700の実行、および1日の特定の時間にのみ実行されます)。