同步块中的HashMap与Collections.synchronizedMap()之间有什么区别。

时间:2017-09-25 03:30:43

标签: java collections

synchronized块中的HashMap与Collections.synchronizedMap()之间有什么区别。

HashMap<String,String> hm = new HashMap<String,String>();
hm.put("key1","value1");
hm.put("key2","value2");
synchronized(hm)
{
   // Thread safe operation
}

Map<String, String> synchronizedMap = Collections.synchronizedMap(hm);
// Use synchronizedMap for Thread safe concurrent operation 

这两个中哪个更好?

2 个答案:

答案 0 :(得分:1)

他们是一样的。 synchronizedMap()比自己处理同步要容易得多。

答案 1 :(得分:1)

使用synchronizedMap方法更方便,更安全,因为您知道对地图的所有访问都将受到保护(只要您不通过直接调用hm上的方法来绕过它)。

但是使用synchronized块可以控制锁定的粒度,方法是锁定多个语句,这是synchronizedMap选项不允许的。

因此,如果您需要执行多个语句而不与来自其他线程的调用交错,则必须选择synchronized块(或者如果您正在寻找类似putIfAbsent或类似内容的东西,则切换到ConcurrentHashMap之类的内容功能)。如果您不需要,则synchronizedMap更容易。