Why there is no ConcurrentLinkedHashMap class in jdk?

后端 未结 3 2019
旧时难觅i
旧时难觅i 2021-02-14 17:45

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

相关标签:
3条回答
  • 2021-02-14 17:53

    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?

    0 讨论(0)
  • 2021-02-14 17:55
    #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:

    • Either ConcurrentHashMap exists before this sync mechanism
    • Either there is a performance gain in creating a specific synchronized mechanism.

    My point is in the ideal world of design even ConcurrentHashMap should not exist.

    #end //personal opinion
    
    0 讨论(0)
  • 2021-02-14 18:14

    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:

    • a perception that not many people would need it, and
    • the inherent difficulties in implementing data structures with good performance properties in highly concurrent use cases.

    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.)

    0 讨论(0)
提交回复
热议问题