Java并发容器——ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListMap类的总结

版权声明:个人博客:blog.suyeq.com 欢迎访问 https://blog.csdn.net/hackersuye/article/details/85082621

    此篇博客做记录用,源码分析以后补上。。。。。。。

    jdk1.8以前,ConcurrentHashMap使用的是分段锁技术,将ConcurrentHashMap将锁一段一段的存储,然后给每一段数据配一把锁(segment)(ReentrantLock锁),当一个线程占用一把锁(segment)访问其中一段数据的时候,其他段的数据也能被其它的线程访问,默认分配16个segment。默认比Hashtable效率提高16倍。

    jdk1.8以后,ConcurrentHashMap取消了segment分段锁,而采用CAS原子操作和synchronized内置锁来保证并发安全。数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。synchronized只锁定当前链表或红黑二叉树的首节点,这样只要hash不冲突,就不会产生并发,效率又提升了。

    ConcurrentSkipListMap是一个基于跳跃表实现的并发安全容器, 非阻塞读/写/删除 的有序映射, 最重要的是,它的value是有序存储的,利用空间换时间的思路,采用CAS原子操作保证原子性,未采用锁。

    ConcurrentSkipListSet类内调用的是ConcurrentSkipListMap类实现其功能。

猜你喜欢

转载自blog.csdn.net/hackersuye/article/details/85082621