前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HashMap、Hashtable、ConcurrentHashMap的区别

HashMap、Hashtable、ConcurrentHashMap的区别

作者头像
小黑同学
发布2021-03-02 10:48:20
4170
发布2021-03-02 10:48:20
举报
文章被收录于专栏:E=mc²
ConcurrentHashMap比HashMap多出了一个类Segment,而Segment是一个可重入锁
ConcurrentHashMap比HashMap多出了一个类Segment,而Segment是一个可重入锁

HashMap

底层数组+链表实现,可以存储null键和null值。 HashMap是线程不安全的,在多线程环境中,需要手动实现同步机制


HashTable

底层数组+链表实现,无论key还是value都不能为null,线程安全(安全的实现原理:修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化) Hashtable是线程安全的,它的方法是同步的,可以直接用在多线程环境中


ConcurrentHashMap

从Java5开始,它是HashTable的替代,比HashTable的扩展性更好 ConcurrentHashMap是使用了锁分段技术来保证线程安全的


ConcurrentHashMap提供了与Hashtable和SynchronizedMap不同的锁机制。Hashtable中采用的锁机制是一次锁住整个hash表,从而在同一时刻只能由一个线程对其进行操作;而ConcurrentHashMap默认将hash表分为16个桶,一次锁住一个桶.


ConcurrentHashMap比HashMap多出了一个类Segment,而Segment是一个可重入锁(可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁)

可重入锁
  • synchronized
  • ReentrantLock
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HashMap
  • HashTable
  • ConcurrentHashMap
    • 可重入锁
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档