В какой ситуации вы хотите передать false
для параметра mayInterruptIfRunning
в Future.cancel()
?
Если я правильно понимаю, если вы проходите false
, и задача отменяется, но поток не прерывается, результат (или ExecutionException
) никогда не будет доступен, потому что задача по-прежнему отмечена как отмененная (т.е. isCancelled()
возвращает true
и get()
throws CancellationException
.)
Другие возможные ситуации:
- Реализация
Runnable
илиCallable
не проверяет прерывания и будет завершена, даже если вы ее прервите (здесь прерывание не имеет значения) - Задание уже выполнено до того, как вы вызвали
cancel()
(снова прерывание не имеет значения) - Задача должна выполнить некоторую очистку до ее выхода (хорошо написанная реализация будет использовать
try ... finally
для этого.) - Задача не может быть немедленно завершена и должна продолжать выполнять операции, на которые могут влиять прерывания, например. блокировка ввода-вывода (в этом случае вы, вероятно, не должны вообще вызывать
cancel
)
Итак, когда/почему вы отменяете задачу, не прерывая ее?