为什么jdk中没有ConcurrentLinkedHashMap类?

时间:2012-09-06 12:26:28

标签: java data-structures java.util.concurrent

这个问题直接跟随from my previous question here in SO。我认为我的第二个问题的答案是否定的。所以我想了解为什么java.util.concurrent包中没有ConcurrentLinkedHashMap?我的意思是有一个ConcurrentHashMap但没有ConcurrentLinkedHashMap。在Concurrent环境中拥有这样的类是否完全没有意义?我的意思是它的非可用性的主要技术原因是什么?在Guava / Apache Commons中有类似的东西吗?

3 个答案:

答案 0 :(得分:8)

  

为什么jdk中没有ConcurrentLinkedHashMap类?

您需要向Oracle Java人员询问,但我认为它是以下组合:

  • 认为没有多少人会需要它,
  • 在高度并发的用例中实现具有良好性能属性的数据结构的固有困难。

在这种情况下,在我看来,实现集合类以便迭代键/值/条目集不是并发瓶颈将是......嗯......很难。 (即使人们已经想出办法,但事实仍然是设计和实现并证明通用高度并发数据结构和算法的正确性很难。)

答案 1 :(得分:4)

答案 2 :(得分:2)

#define PERSONAL_OPINION

从设计的角度来看,总是必须使用

更有意义
Map m = Collections.synchronizedMap(new HashMap());
  ...
Set s = m.keySet();  // Needn't be in synchronized block
  ...
synchronized(m) {  // Synchronizing on m, not s!
   Iterator i = s.iterator(); // Must be in synchronized block
   while (i.hasNext())
      foo(i.next());
}

synchronizedMap

中的示例

为什么呢?因为同步机制与高抽象(Map接口)相关联。但假设我是对的,仍然有两个理由仍然有ConcurrentHashMap

  • 此同步机制之前存在ConcurrentHashMap
  • 创建特定的同步机制可以获得性能提升。

我的观点是理想的设计世界,即使ConcurrentHashMap也不存在。

#end //personal opinion