そこで、タスクハンドラーを介してオブジェクトの配列を送信するコードのブロックを作成しました。プログラムがクラッシュし、正しく閉じられなかったインスタンスが発生しました...このコードは、私が考えていることを実行しますか? ?
私の考えでは、次のコードはオブジェクトを取得してハンドラーに渡し、最大30秒が経過するまで待機し、そのスレッドが完了していない場合は強制終了する必要があります。右?
//Iterate through the array to submit them into individual running threads.
ExecutorService threadPool = Executors.newFixedThreadPool(12);
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);
}
//Event handler to kill any threads that are running for more than 30 seconds (most threads should only need .25 - 1 second to complete.
for(Future future : taskList){
try{
future.get(30, TimeUnit.SECONDS);
}catch(CancellationException cx){ System.err.println("Cancellation Exception: "); cx.printStackTrace();
}catch(ExecutionException ex){ System.err.println("Execution Exception: ");ex.printStackTrace();
}catch(InterruptedException ix){ System.err.println("Interrupted Exception: ");ix.printStackTrace();
}
}
threadPool.shutdown(); // SHUT. DOWN. EVERYTHING.