Является ли java.util.concurrent.Future потокобезопасным? - PullRequest
13 голосов
/ 05 декабря 2011

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

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

Спасибо.

Ответы [ 2 ]

11 голосов
/ 05 декабря 2011

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

6 голосов
/ 05 декабря 2011

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

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

...