Helukabel

27.07.2016

Все состояния жизненного цикла пула являются необратимыми, то есть после выхода из состояния выполнения (Running) пул фактически начинает путь к своему завершению, и не существует возможности его повторного использования. В этой точке можно лишь выбрать следующее состояние для перехода: корректное завершение работы (Shutdown) или немедленное завершение (Stop). Все последующие переходы между состояниями зависят от обработки задач и происходят внутри пула потоков. Следовательно, действительное завершение потоков и освобождение памяти невозможно без реализации конкретной стратегии отмены выполнения в рамках задач, например но схеме «прерывание-обработка» (interrupt-helukabel).

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

Номер на рисунке shutdown() shutdownNow()

1. Новые задачи Новые задачи получают отказ Новые задачи получают отказ

2. Задачи, ожидающие в очереди Ожидающие задачи будут выполнены Ожидающие задачи не выполняются и возвращаются в списке List, чтобы дать возможность выполнить их в других потоках при необходимости

3. Выполняющиеся задачи Выполнение продолжается Потоки прерываются