Является ли java.util.concurrent.Future threadsafe?

Я пытаюсь найти документацию, указывающую, является ли java.util.concurrent.Future небезопасным. Например, могу ли я безопасно предоставить тот же экземпляр Future для нескольких потоков, которые все вызовут Future.get(...)?

Я тестировал код с использованием Future таким образом, и, похоже, он работает нормально, но я был бы намного счастливее, если бы смог найти документально подтвержденное ожидание того, что будущее безопасно для одновременного доступа таким образом.

Спасибо.

Ответ 1

Учитывая, что Будущее предназначено для использования несколькими потоками (по крайней мере, тот, который представляет, и тот, который устанавливает его результат), и учитывая, что в документации указано, что между асинхронным вычислением и действия, возникающие после вызова get, я бы предположил, что реализации являются потокобезопасными (по крайней мере, стандартные реализации).

Ответ 2

Если вы используете Future, возвращенный из ExecutorService, тогда да, они гарантированно будут потокобезопасными. Поскольку Future является интерфейсом, создатель интерфейса не может гарантировать, что все реализации будут потокобезопасными, хотя.

Тем не менее, Низе действительно поднимает хороший момент. Док говорит, что реализации интерфейса Future должны быть потокобезопасными, не делая реализацию потокобезопасной, тогда нарушающей контракт Future.