如果我创建地图
Map map=new HashMap(40,.75f);
通过以下两种不同方式进行同步
Collections.synchronizedMap(map) :- which is internally using mutex
synchronized(map){}
上面两种方法有什么区别。
最佳答案
Collections.synchronizedMap(map) :- which is internally using mutex
synchronized(map){}
上面两种方法有什么区别。
区别在于
Collections.synchronizedMap(map)
通过将地图包装在同步对象中为您进行同步。如果查看Collections
类的Java源代码,则应该看到SynchronizedMap
对象。在那里,它的工作类似于:final Object mutex; // Object on which to synchronize
...
public int size() {
synchronized (mutex) {return m.size();}
}
因此,在内部它的作用与在外部调用
synchronized
的作用相同。但是,这需要您手动进行猜测工作和编程。它可以使您避免丢失和保护重要的方法调用,或者将您的Map
传递给没有正确同步它或其他东西的库。第三种选择可能更好,那就是使用
ConcurrentHashMap
。这是一个从头开始编写的哈希映射,以允许多个线程对其并行操作。它将提供比您提到的两个选项更好的性能。