码迷,mamicode.com
首页 > 其他好文 > 详细

ConcurrentHashMap和HashTable的区别?

时间:2020-03-18 15:55:30      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:元素   分段   竞争   cheng   tps   线程安全   方法   www   mic   

  1. ConcurrentHashMap和HashTable的区别?

    参考: 博客主dreamcatcher-cx

    ? GitHub Guide哥

    • 底层数据结构:JDK1.7底层采用 数组+链表 实现。JDK1.8采用 数组+链表/红黑二叉树 实现。HashTable一直都采用的是 数组+链表 的形式,数组是HashMap的主体,链表主要是解决冲突而存在的。

    • 实现线程安全的方式:

      • ConcurrentHashMap:JDK1.7,ConcurrentHashMap(分段锁)对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据端的数据就没有锁竞争,提高了并发量。JDK1.8采用 Node节点数组+链表+红黑树 实现,并发控制synchronized和CAS来操作。

      JDK1.7分段锁:

      技术图片

      JDK1.8实现:TreeBin:红黑二叉树节点 Node:链表节点

      技术图片

      • HashTable:使用 synchronized 来保证数据安全。效率低下,当一个线程访问同步方法时,其他线程也访问同方法,可能会进入阻塞或轮询的状态。例如put添加元素,另一个线程就不能使用put,也不能使用get,效率低下。

      HashTable实现: 技术图片

ConcurrentHashMap和HashTable的区别?

标签:元素   分段   竞争   cheng   tps   线程安全   方法   www   mic   

原文地址:https://www.cnblogs.com/lijiahaoAA/p/12517318.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!