为什么jdk中没有ConcurrentLinkedHashMap类?

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

为什么jdk中没有ConcurrentLinkedHashMap类?

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

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

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

看起来有一个来自Google https://code.google.com/p/concurrentlinkedhashmap/

另请查看这篇文章: ConcurrentLinkedHashMap已集成到Guava中意味着什么?

#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