HashTable 、HashMap、ConcurrentHashMap之间的区别

HashTable

  • HashTable是线程安全的,内部给关键方法直接加上synchronized实现同步(相当于给this加锁)
  • HashTable不允许键或值为null
  • HashTable是历史遗留问题,现在通常使用HashMap 或者 ConcurrentHashMap来代替

HashMap 

  • HashMap不是线程安全,在单线程环境下使用更佳
  • 允许一个null键和多个null值 

ConcurrentHashMap 

  • ConcurrentHashMap 把一个全局的大锁,改进成了每个链表独立的一把小锁,减少了锁冲突的概率
  • 充分利用到了 CAS(比较和交换)特性,把一些不必要的加锁环节省略了。比如,使用原子操作(CAS)记录表中元素个数的变化
  • 针对读操作没有加锁,读和读之间、读和写之间都不会有锁竞争,写和写之间需要加锁
  • ConcurrentHashMap 在扩容时,分多次完成数据的拷贝
  • 不允许null键或值 
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值