hashmap和concurrenthashmap的区别是什么?

hashmap和concurrenthashmap的区别如下:

HashMap不是线程安全的,而ConcurrentHashMap是线程安全的。

ConcurrentHashMap采用锁分段技术,将整个Hash桶进行了分段segment,也就是将这个大的数组分成了几个小的片段segment,而且每个小的片段segment上面都有锁存在。

那么在插入元素的时候就需要先找到应该插入到哪一个片段segment,然后再在这个片段上面进行插入,而且这里还需要获取segment锁。

ConcurrentHashMap让锁的粒度更精细一些,并发性能更好。

HashMap:

底层数组+链表实现,可以存储null键和null值,线程不安全。

初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂。

扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入。

插入元素后才判断该不该扩容,有可能无效扩容(插入后如果扩容,如果没有再次插入,就会产生无效扩容)。

ConcurrentHashMap:

底层采用分段的数组+链表实现,线程安全。

通过把整个Map分为N个Segment,可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。(读操作不加锁,由于HashEntry的value变量是 volatile的,也能保证读取到最新的值。)。

Hashtable的synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。



  • 鑻规灉 浜岄潰涓夐潰鐨勯棶棰
    绛旓細浜岄潰涓撲笟鎬ч棶棰橈紝涓夐潰绾亰澶1锛庡浣曞疄鐜板垎甯冨紡鎺ュ彛骞傜瓑鎬?濡備綍淇濊瘉鏁版嵁涓鑷存2. MySQL鐨勯棿闅欓攣鏄粈涔?3. Redis鐨剆etNx閿佹湁浠涔堥棶棰?4.HashMap鏁版嵁缁撴瀯?瑙﹀彂閾捐〃鍒囨崲绾㈤粦鏍戠殑鏉′欢鏄粈涔? Concurrnthashmap鏁版嵁缁撴瀯?1.8鏄庝箞瀹炵幇鐨?浣犺繕浜嗚В1.8鏈夊摢浜涘彉5锛庝负浠涔堜笉鎺ㄨ崘鐢‥xecutors锛岀嚎绋嬫睜鍘熺悊?绾跨▼姹...
  • 扩展阅读:camp buddy mikkoukun ... 腐化5.0安卓汉化直装版 ... blackmonkey pro cg ... 腐化 v2.50 精翻汉化版 ... x4 945 passmark ... concurrent hashmap ... 腐蚀corruption游戏下载 ... coda shop myanmar ... hashmap解决hash碰撞 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网