2013-03-31 11 views
5

どのように私は排他的な書き込みを達成することができますが、非排他的な読み取りですか?私はsynchronizeセッターにアクセスし、変数volatileを作ることができますか?これで十分ですか? Java5同時APIでどのように排他的な書き込みを達成するが、非排他的な読み取り?

+1

どのような種類の変数ですか?原子の書き込みが保証されているタイプもあります。 –

+1

これを必要とするコードの例を表示できますか?状況によっては、変数volatileを単にマークすることもできます。 – assylias

答えて

6

ルック:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/ReadWriteLock.html

あなたは、いくつかのスレッドがロックなしで読み書きするときにのみロックできるようにすることができますので、これはあなたの条件を達成します。ここで

読み込むときに同期の伝統を持つこのAPIを比較する興味深い記事:ReentrantReadWriteLock vs synchronized

また、@assyliasはコメントで言ったように、あなたはそれが本当に必要がない場合、ロックを避ける必要があります。

確かに、あなただけのvolatileキーワードを信頼することができますし、両方の条件が満たされた場合にのみ:

をあなただけの状況の 制限されたセットの下で揮発性の変数の代わりに、ロックを使用することができます。次の基準の両方が、望ましいスレッドセーフティを提供するために揮発性変数に対して を満たす必要があります。

_変数への書き込みは現在の値に依存しません。

_ 変数は、他の変数を持つ不変式には参加しません。

+1

ユースケースによっては、ロックを使用する必要はなく、volatileでも十分です。 – assylias

関連する問題