当前位置: 首页 > news >正文

Hashmap 和 hashtable ConcurrentHashMap 区别

HashMap和HashTable的区别:

  1. HashMap是非线程安全的,HashTable是线程安全的。
  2. HashMap的键和值都允许有null值存在,而HashTable则不行。
  3. HashMap线程不安全,HashTable线程安全,但是因为线程安全的原因,HashMap效率更高。
  4. HashTable是同步的,HashMap不是。因此,HashMap更适合于单线程环境,而HashTable适合于多线程环境,一般现在是不建议使用HashTable,
    1. ①是因为HashTable是遗留类,内部实现很多没有优化,并且冗余。
    2. ②即使在多线程环境下,现在也有同步的ConcurrentHashMap替代。

HashTable和ConcurrentHashMap区别:

HashTable使用的是Synchronized关键字修饰,ConcurrentHashMap是JDK1.7使用了锁分段技术来保证线程安全的。JDK1.8ConcurrentHashMap取消了Segment分段锁,采用CAS和synchronized来保证并发安全。

ConcurrentHashMap底层是数组+链表/红黑树

HashTable底层是数组加链表

ConcurrentHashMap中的synchronized只锁定当前链表或红黑树的首节点,只要hash不冲突,就不会产生并发,效率有提示N倍

为什么ConcurrentHashMap优于HashTable?

  1. ConcurrentHashMap 在JDK1.8以后采用的是CAS 乐观锁和synchronized悲观锁,而HashTable采用的是Synchronize悲观锁。其中ConcurrentHashMap的synchronized
  2. 乐观锁的范围小于悲观锁,尤其是读多写少的场景下,并发性能优于悲观锁。

http://www.mrgr.cn/news/1552.html

相关文章:

  • 哪款蓝牙耳机最具有性价比呢?四款喜爱度爆表百元耳机推荐!
  • 销售预测数据挖掘实战V2.0
  • 表单自定义规则的校验
  • Kali Linux 三种网络攻击方法总结(DDoS、CC 和 ARP 欺骗)
  • 如何评估和选择适合自己风险承受能力的期权合约类型?
  • Hive3:常用的虚拟列(Virtual Columns)
  • 【手撕数据结构】链式二叉树
  • 二叉树(四)
  • 低代码: 组件库测试之渲染和元素获取,触发事件,更新表单,验证事件以及异步请求
  • 2024开源资产管理系统推荐 8款免费开源IT资产管理系统/软件
  • C++遍历for_each
  • ervlet、jsp、Cookie、Ajax学习
  • 使用WINUI3 编写一个小软件1 C#
  • Zabbix图形乱码处理
  • C++中的多态性
  • 基于xilinx IP的频域脉冲压缩算法的实现和matlab仿真
  • STM32后备区域:读写BKP备份寄存器与使用RTC实时时钟详解
  • 无人机视角下的EasyCVR视频汇聚管理:构建全方位、智能化的AI视频监控网络
  • Android Studio SQLite Manage
  • 狄利克雷卷积