java 为什么jdk中没有ConcurrentLinkedHashMap类?

zpgglvta  于 2023-03-06  发布在  Java
关注(0)|答案(3)|浏览(139)

这个问题直接跟在from my previous question here in SO后面。我想我的第二个问题的答案是否定的。所以我想知道为什么java.util.concurrent包中没有ConcurrentLinkedHashMap?我的意思是有ConcurrentHashMap但没有ConcurrentLinkedHashMap。在并发环境中有这样一个类难道一点意义都没有吗?我的意思是它不可用的主要技术原因是什么?在Guava/ Apache Commons中有类似的东西吗?

yeotifhr

yeotifhr1#

为什么jdk中没有ConcurrentLinkedHashMap类?
您可能需要问Oracle Java人员,但我认为它是以下各项的组合:

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

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

s5a0g9ez

s5a0g9ez3#

#define PERSONAL_OPINION

从设计的Angular 来看,总是使用

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());
}

同步Map中的示例
为什么呢?因为同步机制与高度抽象(Map接口)绑定在一起。但是假设我是对的,仍然使用ConcurrentHashMap可能有两个原因:

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

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

#end //personal opinion

相关问题