Почему ForkJoinPool :: shutdownNow возвращает пустой список? - PullRequest
1 голос
/ 26 апреля 2019

ExecutorService имеет метод

List<Runnable> shutdownNow()

, который

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

Однако ForkJoinPool всегдавозвращает Collection.emptyList ().Поскольку реализация ForkJoinPool

пытается отменить и / или остановить все задачи и отклонить все последующие отправленные задачи,

не должна также возвращать список задач, которые былиотменен?

1 Ответ

3 голосов
/ 26 апреля 2019

Почему пустой список?
Документ объясняет, что (выделено мое):

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

Почему?

Поскольку ForkJoinPool является «специальной» реализацией ExecutorService.
У него могут быть некоторые зависимости задачи, связанные с выполненными вилками.
Например, в приведенном ниже примере, если отправленная задачаостановлен, вы также хотите, чтобы подзадача 1 и подзадача 2 также были завершены:

simple example of fork join
Вот почему при остановке задач для экземпляра ForkJoinPool вывернет List, что означает, что больше никаких задач не ожидается.Таким образом, любые задачи, ожидающие завершения некоторых других задач или обрабатываемые в настоящий момент, также прекращаются как более не требующиеся.
Хотя я не уверен, что возврат метода (я не нашел подсказок по этому поводу) будет использоваться длятекущая реализация.

...