08/05/18 01:39:06
>>262
やっぱり理解不足。
putもgetもsynchronized (myMap) { } にしておく、が正解。
getだからといってつけないと、痛い目にあう(ヒント:Atomic性)
>Map の実装を ConcurrentHashMap にする
正しいといえば正しい。
だけど、並行処理で品質を高めるには1箇所で必要最低限の同期を取るのがポイント。
例えばMapとなにか別の要素もあわせて同期を取りたいとする。
すると、Mapで同期をとってさらにラップクラスで同期を調整して・・・と複雑になる。
そんな場合は同期を取るクラスは1箇所にしたほうが楽。
また、全てのメソッドを同期を取る必要があるか?という点も重要。
とはいえ、そのような要素がなければ簡単に実現できるConcurrentHashMap を使うのは正しい(シンプルこそ正義)。
予断だが、外部にさらしてもmap = null では何の影響もないぞw
map.clear() 等はマズイのでオシマイには変わらないけど。