排他的な書き込みと非排他的な読み取りを実現するにはどうすればよいですか? synchronize
セッターにアクセスして変数を作ることはできますvolatile
か? これで十分ですか?
質問する
317 次
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 に答える