5

排他的な書き込みと非排他的な読み取りを実現するにはどうすればよいですか? synchronizeセッターにアクセスして変数を作ることはできますvolatileか? これで十分ですか?

4

1 に答える 1

6

Java5 並行 API を見てください。

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

ロックなしで複数のスレッドの読み取りを許可し、書き込み時にのみロックを許可できるため、これは要件を達成します。

読み取り時にこの API を従来の同期化と比較した興味深い投稿: ReentrantReadWriteLock と同期化

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

volatile実際、両方の条件が満たされている場合にのみ、キーワードを信頼できます。

ロックの代わりに volatile 変数を使用できるのは、限られた状況でのみです。揮発性変数が目的のスレッド セーフを提供するには、次の両方の基準を満たす必要があります。

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

_ 変数は他の変数との不変条件に参加しません。

于 2013-03-31T11:28:36.087 に答える