Будущее возвращается до окончательного выполнения в Callable при отмене - PullRequest
1 голос
/ 27 сентября 2011

У меня есть тест, который периодически завершается с ошибкой, когда вызов future.get возвращается до того, как будет выполнен блок finally в Callable, когда будущее отменяется. Вот основной рабочий процесс:

future.cancel(true);

Я вижу InterrupedException, брошенный в Callable

Основной поток ловит CancellationException из future.get вызова

Теперь Callable звонит finally.

На моем ноутбуке тест всегда проходит успешно и в большинстве случаев не выполняется на нашем сервере сборки. И моя записная книжка, и сервер сборки работают под управлением OpenJDK 1.7. Есть идеи?

1 Ответ

0 голосов
/ 27 сентября 2011

Документация cancel(), похоже, не указывает, что она ожидает завершения прерванного потока. Если вы хотите получить такую ​​гарантию, вам нужно будет настроить монитор или какой-либо другой механизм синхронизации, чтобы средство подавления могло ждать, пока процессор скажет: «Я закончил с моим блоком finally».

...