Выключение ExecutorService

Я запутался в javadoc метода ExecutorService # shutdown. Разве это не противоречивые утверждения?

Инициирует упорядоченное завершение работы, в котором ранее отправленные задачи но никаких новых задач не будет принято. Этот метод не ждет для ранее поставленных задач для завершения выполнения. использование Ожидайте, чтобы сделать это.

Если он может упорядочить выключение ранее отправленных задач, то как он не может дождаться завершения выполнения?

Ответ 1

Это означает, что метод немедленно возвращается в поток, который вы вызываете, но задачи, которые еще не были выполнены, все еще могут выполняться в других потоках.

Если вы хотите, чтобы ваша программа дождалась завершения ранее поставленных задач, вы должны вызвать awaitTermination после вызова shutdown.

Ответ 2

Это означает, что задачи будут выполняться до завершения, но этот метод немедленно вернется, не дожидаясь, когда это произойдет.

Итак, чтобы полностью отключить вашего исполнителя без каких-либо задач, вы должны:

executor.shutdown();
executor.awaitTermination(long timeout, TimeUnit unit);

В качестве альтернативы, если вы просто хотите остановить своего исполнителя как можно быстрее, используйте shutdownNow().