多线程与类

时间:2016-05-29 17:21:03

标签: java multithreading

这是一个有趣的问题,但我想知道每个人对这种设计模式的看法。

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方法的副本?如果我刚刚离开包装器,因为没有真正的性能提升,这会是最好的吗?

1 个答案:

答案 0 :(得分:1)

ConcurrentHashMap提供了一种最小化同步开销的方法。同步get方法时,会产生正常的同步开销,从而影响性能。

如果Wrapper类中没有其他代码,我会将其删除,因为它似乎没有添加任何内容。