java - Collections中的synchronizedMap方法是否同步读写操作

标签 java collections dictionary synchronized java-5

当我执行 Collections.synchronizedMap(someHashMap) 时,对映射的所有访问都同步吗?或者只同步写操作(put)? 如果有两个线程正在从 Map 读取数据怎么办?会同步吗?似乎没有必要 如果一个线程正在执行 put() 而另一个线程正在执行 get(),该怎么办?

最佳答案

查看包装 MapSynchronizedMap 源代码。

...
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/

相关文章:

python - 类型错误 : 'dict_keys' object does not support indexing

java - 如何通过在android或java中捕获动画 View 来制作视频文件?

c# - 我们可以修改队列中对象的属性 - C# 吗?

java - 为什么Java中String.Replace后String值没有改变?

java - 如何解决类型安全警告从 Collection 到 List<File> Java 6 的未经检查的强制转换而不使用抑制注释

c# - 具有两个键和一个对象的最佳 C# 集合是什么?

python - 将数据作为字典输出到新的 python 文件中

python - 带有 dict.fromkeys() 和类字典对象的 KeyError

java - 在 Java 中分解包含姓氏、名字和首字母的字符串

java - 使用 JOptionPane 隐藏数据