У меня есть код ниже, вызываемый из основного потока, использующий пул ExecutorService и запускающий поток для обработки каждого найденного файла.Я пытаюсь понять поведение ExecutorService, когда основной поток завершается командой kill.Что происходит с порожденными нитями?Их сразу же убивают или они заканчивают работу после того, как закончили свою работу?
Также есть ли лучший / более безопасный способ написания приведенного ниже фрагмента, особенно если я хочу выполнить эту часть в бесконечном цикле, напримерждет, когда файлы будут сброшены во входной каталог и назначат потоки для их обработки?В таком случае я должен создавать новый пул и .awaitTermination
в каждой итерации цикла?
Большое спасибо
ExecutorService executorService = Executors.newFixedThreadPool(maxThreads);
for (File inputFile : inputDir.listFiles()) {
if (inputFile.isFile())
executorService.submit(new MyRunnable(inputFile));
}
executorService.shutdown();
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);