HashTable, HashMap, ConcurrentHashMap 之间的区别

HashMap

HashMap是单线程环境下使用的哈希表,它是线程不安全的,在多线程环境下使用HashMap可能会出现线程安全的问题~

HashTable

HashTable使用了synchronized关键字来确保线程安全,但是HashTable的加锁方式是对于整个HashTable对象的加锁,也就是相当于对整个哈希表加锁,锁粒度非常粗,这样的话多个线程下,无论这些线程都是如何操作这个哈希表,都会产生锁冲突,效率会非常低下~

ConcurrentHashMap

ConcurrentHashMap是我们在多线程环境下推荐使用的一种线程安全的哈希桶结构,ConcurrentHashMap存在以下的几个优势:

1、锁粒度细化了,ConcurrentHashMap中的每个哈希桶都有自己的锁,大大降低了锁冲突的概率,性能也就大大提高了

2、ConcurrentHashMap的读操作不加锁,只给写操作加锁

3、ConcurrentHashMap充分利用了CAS的特性

4、ConcurrentHashMap对于扩容操作进行了特殊的优化(化整为零)

化整为零解释:ConcurrentHashMap扩容时会再开辟一块空间,把旧的数据一点一点搬运到新的里(每次只搬运一点),旧的和新的会同时存在一段时间,搬运结束后,释放旧的空间

5、HashMap中的key允许为null,HashTable和ConcurrentHashMap中key不允许为null

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值