ConcurrentHashMap 和 Hashtable 的区别主要体现在实现线程安全的方式上不同。

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

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

ConcurrentHashMap 和 Hashtable 的区别相关推荐

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

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

  2. ConcurrentHashMap与HashTable的区别

    ConcurrentHashMap与HashTable都是线程同步的容器,主要区别体现在二者实现线程安全的方式上. 底层数据结构: JDK1.7的 ConcurrentHashMap 底层采用 分段的 ...

  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. “大龄”码农的“中年危机”:35岁之后,该如何应对?
  2. 【并发编程】volatile简单使用
  3. 第3章:Kubernetes监控与日志管理
  4. 项目奖金一般有多少_全年一次性奖金如何进行纳税筹划?
  5. Nginx的官方简介
  6. [Dynamic Language] Python os
  7. 禁止微信调整页面字体大小
  8. 题目57 6174问题
  9. 【数据资产】数据资产目录建设方法与案例
  10. cisco思科模拟器交换机和路由器基础命令
  11. 基于JavaWEB+MySQL的房屋租赁网站管理系统
  12. python实现图片切割及拼图游戏
  13. 小学带计算机2000的检讨书,小学生检讨书范文
  14. did you register the component correctly
  15. 博通Broadcom SDK源码学习与开发1——SDK源码探究与Cable Modem 系统编译
  16. asp是什么, javascript和php,asp区别,什么是 JavaScript 引擎, nodejs和vuejs的关系,nodejs和javascript区别
  17. 首先下载安装data.table包_首次揭秘“超级签”与企业包行业内幕!
  18. 数据库只读问题解决!!!MySQL server is running with the --read-only option
  19. 自定义画圆进度条,带波浪动态效果
  20. BeatMark X for mac(fcpx音乐卡点神器)

热门文章

  1. Exchange Server 2016管理系列课件53.DAG管理之设置滞后数据库副本
  2. @ConditionalOnMissingBean注解理解
  3. leetcode 【 Search Insert Position 】python 实现
  4. Java中long和Long有什么区别
  5. android-仿QQtab
  6. 关闭主窗体而不退出主程序 以及如何获取操作系统的关闭、注销信息
  7. 源码编译安装 swoole
  8. vue-video-player集成videojs-contrib-hls实现.m3u8文件播放
  9. 课堂练习---统计空格流程图、Jackson图
  10. j2ee gradle构建