来自Unmodfiable Map的并发读取

nsf*_*n55 10 java concurrency

如果我静态初始化地图并将引用设置为Collections.unmodifiableMap(Map m).我是否需要同步读取?

private static final Map<String,String> staticMap; 
static{
   Map<String,String> tempMap = new HashMap<String,String>();

   tempMap.put("key 1","value 1");
   tempMap.put("key 2","value 2");
   tempMap.put("key 3","value 3");

   staticMap = Collections.unmodifiableMap(tempMap);
}
Run Code Online (Sandbox Code Playgroud)

Col*_*inD 10

不,您在那里创建的地图实际上是不可变的(因为没有任何引用可变支持地图)并且对并发访问是安全的.如果你想更清楚地保证这一点,并且更容易创建地图,那么GuavaImmutableMap类型就是为了这种用途而设计的(除此之外):

private static final ImmutableMap<String, String> staticMap = ImmutableMap.of(
    "key1", "value1",
    "key2", "value2",
    "key3", "value3");
Run Code Online (Sandbox Code Playgroud)


Liv*_*Liv 5

不,读取不修改地图所以我根本不担心它.只有写入+写入或写入+读取需要围绕它进行同步.