这是一个有趣的问题,但我想知道每个人对这种设计模式的看法。
public class MyThreadedMap {
private ConcurrentHashMap<Integer, Object> map;
...
public class Wrapper {
public Object get(int index){
return map.get(index);
}
}
}
此时,多个线程将拥有自己的Wrapper实例,并将使用wrapper.get(index)访问该地图。
我发现使用包装器而没有包装器的性能变化稍微好一点,那就是包装器有点帮助。当我在get方法上放置synchronized时会出现严重的性能损失。
这到底发生了什么?在实例化内部类时,我是否为每个实例创建了该get方法的副本?如果我刚刚离开包装器,因为没有真正的性能提升,这会是最好的吗?
答案 0 :(得分:1)
ConcurrentHashMap提供了一种最小化同步开销的方法。同步get方法时,会产生正常的同步开销,从而影响性能。
如果Wrapper类中没有其他代码,我会将其删除,因为它似乎没有添加任何内容。