if (isDownloadLogRequired) {
ExecutorService pool = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
for (HostGenericServiceTicket hostGenericServiceTicket : hostGenericServiceTickets) {
pool.submit(new DiagnosticLogDownloader(logNames, downloadTo, hostGenericServiceTicket));
}
pool.shutdown();
try {
pool.awaitTermination(downloadTimeout, TimeUnit.SECONDS);
} catch (InterruptedException e) {
System.err.println(MessageFormat.format("{0}: Reason: {1}", e.getClass()
.getSimpleName(), e.getMessage()));
}
}
если downloadTimeout установлен на 180 секунд, потоки должны быть убиты, а программа должна заканчиваться правильно?awaitTermination в threadpool не завершает пул потоков
Но тогда почему описание этого API, как это? - логическое awaitTermination (длинный тайм-аут, TimeUnit блок) бросает InterruptedException \t блоков, пока все задачи не будут завершены выполнение после запроса завершения работы, или тайм-аут \t происходит, или текущий поток прерывается, в зависимости от того происходит первым. – Manav
Да, это именно то, что я сказал «в зависимости от того, что произойдет раньше». На самом деле он ничего не делает для прекращения потоков. –
, то программа должна двигаться вперед после таймаута и заканчивать вправо? ... он должен блокировать только время таймаута в секундах, а затем двигаться вперед ... и когда моя программа умирает, все потоки должны умереть с ней правильно? .. Я имею в виду, что в моем случае сначала происходит тайм-аут ... поэтому код больше не блокирует этот вызов и движется вправо? – Manav