为什么jdk中没有ConcurrentLinkedHashMap类?

问题描述 投票:0回答:3

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

java data-structures java.util.concurrent
3个回答
11
投票

为什么jdk中没有ConcurrentLinkedHashMap类?

你需要问 Oracle Java 人员,但我想它是以下各项的组合:

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

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



-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
    
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.