Я работаю над исполнителями в java, чтобы одновременно запускать больше потоков за раз. У меня есть набор Runnable Objects, и я назначаю его Exceutors.The Executor работает нормально и все прекрасно. Но после того, как все задачи выполняются в пуле, программа java не завершена, я думаю, что Executor занимает некоторое время, чтобы убить thread.please, кто-нибудь поможет мне сократить время, затраченное исполнителем после выполнения все задачи.
Как остановить выполнение Execution ThreadPool в java?
Ответ 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;
}
Вы также можете использовать профилировщик для изучения того, почему некоторые потоки не завершились.