このコードで volatile は冗長ですか?
public class Test {
private volatile Map<String, String> map = null;
public void resetMap() { map = new ConcurrentHashMap<>(); }
public Map<String, String> getMap() { return map; }
}
つまり、map = new ConcurrentHashMap<>();
可視性の保証はありますか?
私が見る限り、によって提供される唯一の保証は次のConcurrentMap
とおりです。
オブジェクトをキーまたは値として ConcurrentMap に配置する前のスレッド内のアクションは、別のスレッド内の ConcurrentMap からのそのオブジェクトのアクセスまたは削除に続くアクションの前に発生します。
java.util.concurrent の他のスレッド セーフ コレクション (CopyOnWriteArrayList など) はどうですか?