This question follows directly from my previous question here in SO . I think the answer to my second question is no . So I would like understand why there is no ConcurrentLinke
Looks like there is one from Google https://code.google.com/p/concurrentlinkedhashmap/
Check also this post: What does it mean that ConcurrentLinkedHashMap has been integrated into Guava?
#define PERSONAL_OPINION
From a design point of view, it makes more sense to always have to use
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());
}
example in synchronizedMap
Why? Because the synchronization mechanism is tied to a high abstraction (the Map
interface). But assuming I am right there can be two reasons to still have ConcurrentHashMap
:
ConcurrentHashMap
exists before this sync mechanismMy point is in the ideal world of design even ConcurrentHashMap
should not exist.
#end //personal opinion
Why there is no ConcurrentLinkedHashMap class in jdk?
You would need to ask the Oracle Java guys that, but I imagine that it is a combination of:
In this case, it seems to me that implementing the collection class so that iterating the key/value/entry sets is not a concurrency bottleneck would be ... um ... difficult. (And even if people have figured a way to do it, the fact remains that designing and implementing and proving the correctness of general purpose highly concurrent data structures and algorithms is hard.)