16

java.util.concurrent.Future がスレッドセーフかどうかを示すドキュメントを探しています。たとえば、Future.get(...) をすべて呼び出す複数のスレッドに、Future の同じインスタンスを安全に与えることはできますか?

この方法で Future を使用してコードをテストしたところ、問題なく動作しているように見えますが、この方法での同時アクセスに対して future が安全であるという文書化された期待を見つけることができれば、もっとうれしいです。

ありがとう。

4

2 に答える 2

12

Future が複数のスレッド (少なくともサブミットするスレッドとその結果を設定するスレッド) で使用されることを意図していること、および非同期計算と発生するアクションの間に事前発生関係があることがドキュメントで指定されていることを考えると、 get 呼び出しの後、実装はスレッドセーフであると想定します (少なくとも標準的な実装)。

于 2011-12-05T18:56:16.613 に答える
7

Futureから返されたを使用している場合 ExecutorService、はい、それらはスレッドセーフであることが保証されています。Future はインターフェースであるため、インターフェースの作成者は、すべての実装がスレッドセーフであることを保証できません。

ただし、Nizet は良い点を指摘しています。ドキュメントは、Future インターフェースの実装はスレッドセーフであるべきだと言っています。実装をスレッドセーフにしないと、Future の契約に違反します。

于 2011-12-05T18:54:46.210 に答える