Подтвердить что ты не робот

Как остановить выполнение Execution ThreadPool в java?

Я работаю над исполнителями в java, чтобы одновременно запускать больше потоков за раз. У меня есть набор Runnable Objects, и я назначаю его Exceutors.The Executor работает нормально и все прекрасно. Но после того, как все задачи выполняются в пуле, программа java не завершена, я думаю, что Executor занимает некоторое время, чтобы убить thread.please, кто-нибудь поможет мне сократить время, затраченное исполнителем после выполнения все задачи.

4b9b3361

Ответ 1

Класс ExecutorService имеет 2 метода только для этого: shutdown() и shutdownNow().

После использования метода shutdown() вы можете вызвать waitTermination() для блокировки, пока все запущенные задачи не будут завершены. Вы даже можете предоставить тайм-аут, чтобы предотвратить ожидание.

Возможно, вы захотите нажать на некоторые из этих ссылок, которые я предоставляю. Они идут прямо к документам, где вы можете самостоятельно прочитать этот материал.

Ответ 2

executor.shutdown() с awaitTermination (timeout) не убивает потоки. (т.е.), если ваша выполняемая задача находится внутри цикла опроса, она не убивает задачу. Все, что он делает, это прервать выполняемые задачи при достижении таймаута. Итак, в коде для вашего runnable-класса, если вы ждете какого-то условия, вы можете изменить условие как

while (flagcondition && !Thread.currentThread().isInterrupted()) {}

Это гарантирует, что задача останавливается, когда поток прерывается, когда цикл while завершается. Кроме того, вы можете захотеть поймать прерванное исключение и установить flag = false в блоке catch для завершения потока.

try {
    // do some stuff and perform a wait that might throw an InterruptedException
} catch (InterruptedException e) {
    flagcondition = false;
}

Вы также можете использовать профилировщик для изучения того, почему некоторые потоки не завершились.