Я пытаюсь обработать все исключения, сгенерированные в многопоточной задаче, чтобы устранить утечки памяти, прерывания или исключения выполнения (я не хочу их распространять) и тому подобное. Если я прерываю поток (Thread.currentThread().interrupt()
), является ли shutdownNow()
избыточным в finally
ниже?
ThreadPoolExecutor service = new ThreadPoolExecutor(coreSize, maxSize);
// do stuff
try {
List<Future<?>> futures = new ArrayList<Future<?>>();
for (Item item : items) {
// processing logic
Runnable myTask = new MyTask();
futures.add(service.submit(myTask));
}
for (Future<?> f : futures) {
f.get();
}
} catch (Exception e) {
// todo
} finally {
service.shutdown();
try {
service.awaitTermination(duration, TimeUnit.SECONDS);
} catch (Exception e) {
// todo
Thread.currentThread().interrupt();
} finally {
if (!service.isTerminated()) {
service.shutdownNow();
}
}
}