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