zoukankan      html  css  js  c++  java
  • ConcurrentHashMap和Hashtable区别?

    1、底层数据结构:

    JDK1.7的ConcurrentHashMap底层使用分段的数据+链表实现,JDK1.8采用的数据结构和HashMap1.8的结构一样。数据+链表/红黑二叉树。

    Hashttable和JDK1.8之前的HashMap的底层数据结构类似都是采用数据+链表的形式,数组是HashMap的主体,链表是为了解决哈希冲突而存在的。

    2、实现线程安全的方式(重要):

    在JDK1.7的时候,ConcurrentHashMap(分段锁)对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中的一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。

    在JDK1.8的时候,已经摒弃了Segment的概念,而是直接用 Node 数组+链表+红黑树的数据结构来实现,并发控制使用 synchronized 和 CAS 来操作。

    Hashtable(同一把锁),使用synchronsized来保证线程安全,效率低下。当一个线程访问同步方法时,其他线程也访问同步方法时,可能会进入阻塞或轮询状态,如使用put添加元素,另一个线程不能使用put添加元素,也不能get。

  • 相关阅读:
    epoll源码实现分析[整理]
    linux几种时间函数总结
    linux几种定时函数的使用
    linux下redis数据库的简单使用
    网络编程之非阻塞connect编写
    网络编程之select
    数码相框(LCD、I2C)
    centos tftp和samba的安装与配置
    libevent库简单使用
    c语言随机数
  • 原文地址:https://www.cnblogs.com/wylwyl/p/10255722.html
Copyright © 2011-2022 走看看