关于java:Collections中的synchronizedMap方法是否同步读写操作

Does the synchronizedMap method in Collections synchronize both read and write operations

本问题已经有最佳答案,请猛点这里访问。

当我做一个收藏.同步DMAP(Somehashmap)时,所有的都可以进入同步地图吗?还是只写同步操作?如果从地图上读到两条线怎么办?威尔是同步的吗?似乎有必要如果一个螺纹被放置()而另一个螺纹被放置(),该怎么办?


看一下包装您的MapSynchronizedMap的源代码。

1
2
3
4
5
6
7
8
9
10
11
12
...
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

1
2
3
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {
    return new SynchronizedMap<>(m);
}

所以,是的,所有访问都是同步的。


是的,它同步所有操作。它不使用多个读卡器、单写程序的方法——它就像通过一个监视器同步所有访问一样简单。


集合上的所有方法调用都已同步。一次只允许一个线程读取/修改集合。

集合中的synchronized*方法不是设计为最佳的线程安全版本/实现。他们只是为了方便。

同步是一个困难的问题,通常需要根据您的特定场景使用不同的同步方法。如果您需要其他类型的线程安全性,那么还有许多其他的线程安全集合可用。您也可以自己编写同步逻辑。


读和写都是同步的,这是确保可见性所必需的。