美文网首页
线程安全的 Map对比

线程安全的 Map对比

作者: BeijingIamback | 来源:发表于2018-11-22 18:07 被阅读7次

线程安全的本质:
ConcurrentHashMap:本质上是创建一个HashEntry数组去存储元素。分段去锁数据
Collections.synchronizedMap(): 本质上是返回一个 SynchronizedMap
主要的不同:
ConcurrentHashMap:更新的时候,它会锁住部分数据 ,其他的数据能够被其他线程调用
Collections.synchronizedMap():更新的时候锁住所有数据,其他线程无法介入,除非这个锁释放
注意:如果有许多更新操作,或者相对来说较多的读取操作,应该选择ConcurrentHashMap
另一个不同:
ConcurrentHashMap不会保留元素传入的顺序,和HashMap差不多

进一步说,ConcurrentHashMap能保证不会出现ConcurrentModificationException 这个异常,当一个线程在更新,
另一个线程也去访问的时候。
但是Collections.synchronizedMap()无法保证。

拓展:ConcurrentSkipListMap (since 1.6版本以后)兼顾上边两个的有点,有序和不报异常

相关文章

网友评论

      本文标题:线程安全的 Map对比

      本文链接:https://www.haomeiwen.com/subject/ftcrqqtx.html