- 264 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 01:32:46 ]
- >>260
>・ラップするクラスには、put と get のメソッドを作る putとgetだけを提供する場合、 >if ( list.contains(x) == false ) list.add(x); のような問題は相変わらず回避できないことに注意。 まぁ用途次第かもしれないので、わかってればかまわない。 >・HashMap にしておき、ラッパクラスの put メソッドは、内部で synchronized (myMap) { } ブロックで囲み、 >get メソッドは synchronized をつけなければ、取得時の同時並行性は確保できると思いました。 それはだめ。 変更(put)中のデータを参照(get)すると不正な結果を得たり死んだりする可能性がある。 もっと不可解なことが起きる可能性もあるけど、詳細は件の本でも読んでください。 要するにgetにもsynchronizedは必要。 同期の対象がMap1個で済む状況なら、ConcurrentHashMapは便利。 2個以上のMapを同時に更新しなければならない場合とかには無力。
|

|