ConcurrentHashMap与HashTable都是线程同步的容器,主要区别体现在二者实现线程安全的方式上。

  • 底层数据结构:

JDK1.7的 ConcurrentHashMap 底层采用 分段的数组+链表 实现;
JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树
Hashtable 和 JDK1.8 之前的 HashMap 的底层数据结构类似都是采用 数组+链表 的形式。
数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的;

  • 实现线程安全的方式:

① 在JDK1.7的时候,ConcurrentHashMap(分段锁) 对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。
到了JDK1.8 的时候已经摒弃了Segment的概念,而是直接用 Node 数组+链表+红黑树的数据结构来实现,并发控制使用 synchronized 和 CAS 来操作。(JDK1.6以后 对 synchronized锁做了很多优化) 整个看起来就像是优化过且线程安全的 HashMap,虽然在JDK1.8中还能看到 Segment 的数据结构,但是已经简化了属性,只是为了兼容旧版本;
② Hashtable(同一把锁) :使用 synchronized 来保证线程安全,效率非常低下。当一个线程访问同步方法时,其他线程也访问同步方法,可能会进入阻塞或轮询状态,如使用put 添加元素,另一个线程不能使用 put 添加元素,也不能使用 get,竞争会越来越激烈效率越低。

如果需要保证线程安全,就是用ConcurrentHashMap,效率比HashTable高。并且,HashTable基本被淘汰了,不要在代码中使用它。

ConcurrentHashMap与HashTable的区别相关推荐

  1. ConcurrentHashMap 和 Hashtable 的区别

    ConcurrentHashMap 和 Hashtable 的区别主要体现在实现线程安全的方式上不同. 1.底层数据结构: JDK1.7的 ConcurrentHashMap 底层采用 分段的数组+链 ...

  2. 面试题:ConcurrentHashMap 和 Hashtable 的区别

    面试题:ConcurrentHashMap 和 Hashtable 的区别 关键词 1.8ConcurrentHashMap 只锁 首节点 ConcurrentHashMap 和 Hashtable ...

  3. hashtable是线程安全的吗_Java程序猿必知:线程安全ConcurrentHashMap和Hashtable有啥区别...

    前言 通过之前的文章<HashMap 为什么线程不安全?>,我们都知道 HashMap 不是线程安全的,而本章中 ConcurrentHashMap 和 Hashtable 它们两个都是线 ...

  4. 一文读懂JDK7,8,JD9的HashMap,HashTable,ConcurrentHashMap及他们的区别

    内容和标题一样长哦,人家写了好久的.如无特别指明,内容对应的源码是jdk1.7(后面会和1.8对比) 1:hashmap简介(如下,数组-链表形式) HashMap的存储结构 图中,紫色部分即代表哈希 ...

  5. 面试必备:HashMap、Hashtable、ConcurrentHashMap的原理与区别

    本文转载自 夏雪冬日:https://www.cnblogs.com/heyonggang/p/9112731.html 在实际面试过程中出现集合 Map 的概率接近 100%,可见不背上个 Map ...

  6. java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...

  7. JAVA面试题:HashMap和Hashtable的区别

    HashMap和Hashtable的区别 1.共同点:都是双列集合,底层都是哈希算法 2.区别: * 1.HashMap是线程不安全的,效率高,JDK1.2版本 * Hashtable是线程安全的,效 ...

  8. HashMap和Hashtable的区别--List,Set,Map等接口是否都继承自Map接口--Collection和Collections的区别...

    面试题: 1.HashMap和Hashtable的区别?HashMap:线程不安全,效率高,键和值都允许null值Hashtable:线程安全,效率低,键和值都不允许null值ArrayList代替V ...

  9. java HashMap 与HashTable的区别

    HashMap 与HashTable的区别 HashMap与Hashtable的区别是面试中经常遇到的一个问题.这个问题看似简单,但如果深究进去,也能了解到不少知识.本文对两者从来源,特性,算法等多个 ...

最新文章

  1. 电脑录屏工具_屏幕录制工具有哪些?这些录屏软件须知
  2. 内核同步机制——互斥量
  3. 05-数据类型、常量、变量
  4. ConfigParser 模块
  5. 网站用sqlite库,报attempt to write a readonly database,解决方法
  6. Java之文件流操作的文件读写
  7. 使用Nito.AsyncEx实现异步锁
  8. Java微信开发_00_资源汇总贴
  9. 函数指针史上最全的介绍
  10. Pytest装饰器@pytest.mark.parametrize一键生成接口正交试验用例
  11. 用计算机模拟实验技术路线,自然科学基金申请书模板
  12. java 驼峰自动映射_总结springboot开启mybatis驼峰命名自动映射的三种方式
  13. 云-PC-matlab-物联网及其它
  14. rtthread学习之(3)——STM32系列BSP外设驱动使用教程
  15. 阿里云服务器可选系统有哪些?如何选择?
  16. excel 将日期转换为8位数字
  17. c++坦克大战小游戏
  18. ubuntu8.04安装配置,现有问题集合,及解决方法
  19. 读《Jonathan von Neumann and EDVAC》
  20. 英文 E-mail写作指南

热门文章

  1. Git子模块头#39;引用不是树#39;错误
  2. 之间有什么区别。 (点)和$(美元符号)?
  3. 找到的程序集的清单定义与程序集引用不匹配
  4. Windowstelnet服务怎么开启 Win11telnet服务怎么开启详细介绍
  5. Win11如何提高游戏性能?Win11提升游戏性能的方法
  6. ros简版Action通讯SimpleAction
  7. android 5.0 字体,QC8916 修改系统默认字体(Android 5.0)
  8. STM32:位带操作分析
  9. wordpress api ajax,Woocommerce rest api - 在wordpress中通过ajax创建产品
  10. Vue中Three.js的天空盒