当我执行 Collections.synchronizedMap(someHashMap) 时,对映射的所有访问都同步吗?或者只同步写操作(put)? 如果有两个线程正在从 Map 读取数据怎么办?会同步吗?似乎没有必要 如果一个线程正在执行 put() 而另一个线程正在执行 get(),该怎么办?
最佳答案
查看包装 Map
的 SynchronizedMap
源代码。
...
public V get(Object key) {
synchronized (mutex) {return m.get(key);}
}
public V put(K key, V value) {
synchronized (mutex) {return m.put(key, value);}
}
public V remove(Object key) {
synchronized (mutex) {return m.remove(key);}
}
... // more methods synchronized in the same way
来自
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {
return new SynchronizedMap<>(m);
}
所以,是的,所有访问都是同步的。
关于java - Collections中的synchronizedMap方法是否同步读写操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18241403/