10

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

4

3 回答 3

10

为什么jdk中没有ConcurrentLinkedHashMap类?

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

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

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

于 2012-09-06T12:42:54.857 回答
4

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

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

于 2013-04-17T13:58:53.887 回答
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
于 2012-09-06T12:43:54.413 回答