ExecutorService.close()
Закрывает пул и ждёт завершения всех задач; вызывается автоматически в try-with-resources.
Доступно с: Java 19
Синтаксис
default void close()Примеры
После блока try все задачи гарантированно выполнены:
void main() {
var results = new ConcurrentLinkedQueue<Integer>();
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 1; i <= 3; i++) {
int n = i;
executor.submit(() -> results.add(n * 10));
}
}
IO.println(results.stream().sorted().toList());
}Результат:
[10, 20, 30]Примечания
close() вызывает shutdown() и ждёт окончания всех задач. Порядок, в котором задачи выполнились, не определён, поэтому в примере результат сортируется перед печатью.
См. также
- ExecutorService.shutdown() — Закрывает пул для новых задач и даёт уже принятым доработать.
- try-with-resources — Блок `try`, который сам закрывает открытые ресурсы — файлы, соединения, потоки.
- ExecutorService — Сервис, который выполняет задачи в пуле потоков.
В учебнике
- Пулы потоков и ExecutorService — ExecutorService в Java — пулы потоков, submit, Callable и Future, invokeAll, обработка ошибок в задачах, тайм-ауты и закрытие пула.