如果我同步SynchronizedMap会不会有性能损失?
例如:
private static Map<Integer, Integer> intMap= Collections.synchronizedMap(new HashMap<Integer, Integer>());
public static int doSomething(int mapId) {
synchronized(intMap) {
Integer id = intMap.get(mapId);
if (id != null) {
//do something
}
if (id == null) {
intMap.put(mapId);
}
}
}
我必须在上面的方法中显式同步,因为它是在synchronizedMap上的一组操作。既然我必须同步,那么使用普通的hashmap而不是synchronizedMap更好吗?
如果同步synchronizedMap会有性能问题吗?
答案 0 :(得分:0)
是的,会有性能受到打击。它可能不是很多,因为JVM能够根据使用情况优化这些锁,但它始终存在。
如果您已在该对象上使用synchronized
关键字,除非您的程
答案 1 :(得分:0)
是。您正在对已经同步的集合执行不必要的同步。删除额外的同步块将同样安全有效(实际上更有效)。
此外,我进行了小规模的小型测试:https://gist.github.com/AgentTroll/02b77680efe3b92e350f
(忽略许可证,我在GitHub上的一个项目上有它,它就在那里,所以人们不认为我偷了代码)