这个问题直接跟随from my previous question here in SO。我认为我的第二个问题的答案是否定的。所以我想了解为什么java.util.concurrent包中没有ConcurrentLinkedHashMap?我的意思是有一个ConcurrentHashMap但没有ConcurrentLinkedHashMap。在Concurrent环境中拥有这样的类是否完全没有意义?我的意思是它的非可用性的主要技术原因是什么?在Guava / Apache Commons中有类似的东西吗?
答案 0 :(得分:8)
为什么jdk中没有ConcurrentLinkedHashMap类?
您需要向Oracle Java人员询问,但我认为它是以下组合:
在这种情况下,在我看来,实现集合类以便迭代键/值/条目集不是并发瓶颈将是......嗯......很难。 (即使人们已经想出办法,但事实仍然是设计和实现并证明通用高度并发数据结构和算法的正确性很难。)
答案 1 :(得分:4)
看起来有一个来自Google https://code.google.com/p/concurrentlinkedhashmap/
还查看这篇文章: What does it mean that ConcurrentLinkedHashMap has been integrated into Guava?
答案 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());
}
中的示例
为什么呢?因为同步机制与高抽象(Map
接口)相关联。但假设我是对的,仍然有两个理由仍然有ConcurrentHashMap
:
ConcurrentHashMap
我的观点是理想的设计世界,即使ConcurrentHashMap
也不存在。
#end //personal opinion