ConcurrentHashMap和HashTable的区别?

  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实现:

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

时间: 2024-10-10 07:00:37

ConcurrentHashMap和HashTable的区别?的相关文章

hashmap,ConcurrentHashMap与hashtable的区别

1.hashmap与hashtable的区别 1.我们从他们的定义就可以看出他们的不同,HashTable基于Dictionary类,而HashMap是基于AbstractMap.Dictionary是什么?它是任何可将键映射到相应值的类的抽象父类,而AbstractMap是基于Map接口的骨干实现,它以最大限度地减少实现此接口所需的工作. 2.HashMap可以允许存在一个为null的key和任意个为null的value,但是HashTable中的key和value都不允许为null. 3.H

ConcurrentHashMap和Hashtable的区别

相同点: Hashtable 和 ConcurrentHashMap都是线程安全的,可以在多线程环境中运行: key跟value都不能是null 区别: 两者主要是性能上的差异,Hashtable的所有操作都会锁住整个对象,虽然能够保证线程安全,但是性能较差: ConcurrentHashMap内部使用Segment数组,每个Segment类似于Hashtable,在"写"线程或者部分特殊的"读"线程中锁住的是某个Segment对象,其它的线程能够并发执行其它的Se

HashMap、ConcurrentHashMap、HashTable的区别

注:hashtable:使用一把锁处理并发问题,当有多个线程访问时,需要多个线程竞争一把锁,导致阻塞. concurrentHashMap则使用分段,相当于把一个hashmap分成多个,然后每个部分分配一把锁,这样就可以支持多线程访问. 1.HashMap与hashtable继承关系图: 2.hashmap支持:支持null的key和value值,在hashtable源码中有对null的判断,为null,抛出空指针异常. 3.扩容方式不一样 HashTable默认的初始大小为11,之后每次扩充为

CocurrentHashMap和Hashtable的区别

集合类是Java API的核心,但是我觉得要用好它们是一种艺术.我总结了一些个人的经验,譬如使用ArrayList能够提高性能,而不再需要过时的Vector了,等等.JDK 1.5引入了一些好用的并发集合类,它们对于大型的.要求低延迟的电子商务系统来说非常的有用.这篇文章中将会看看ConcurrentHashMap和Hashtable之间的区别. 这篇文章是HashMap的工作原理以及HashMap和Hashtable的区别的后续.如果你已经读过的话,那么我相信你读完本篇之后会有所收获. 为什么

ConurrentHashMap和Hashtable的区别

集合类是Java API的核心,但是我觉得要用好它们是一种艺术.我总结了一些个人的经验,譬如使用ArrayList能够提高性能,而不再需要过时的Vector了,等等.JDK 1.5引入了一些好用的并发集合类,它们对于大型的.要求低延迟的电子商务系统来说非常的有用.这篇文章中将会看看ConcurrentHashMap和Hashtable之间的区别. 这篇文章是HashMap的工作原理以及HashMap和Hashtable的区别的后续.如果你已经读过的话,那么我相信你读完本篇之后会有所收获. 为什么

ConcurrentHashMap以及HashMap,HashTable的区别

ConcurrentHashMap与HashMap,和HashTable 的区别? ConcurrentHashMap是一个线程安全的key-value数据结构,而HashMap不是.ConcurrentHashMap的数据结构是 数组 + 数组 + 单向链表.HashMap的数据结构是 数组 + 单向列表 HashTable也是线程安全,HashTable与HashMap的存储结构相同,HashTable不允许null为key值,而HashMap允许ConcurrentHashMap是Hash

Java基础知识强化之集合框架笔记78:ConcurrentHashMap之 ConcurrentHashMap、Hashtable、HashMap、TreeMap区别

1. Hashtable: (1)是一个包含单向链的二维数组,table数组中是Entry<K,V>存储,entry对象: (2)放入的value不能为空: (3)线程安全的,所有方法均用synchronized修饰: 2. HashMap: (1)相当于Hashtable的升级版本: (2)可以放入空值: (3)基于hash表实现: (4)按插入的顺序存储: (5)线程不安全:因为多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使

ConcurrentHashMap和Hashtable区别

Hashtable:synchronized是针对整张Hash表的,即每次锁住整张表让线程独占安全的背后是巨大的浪费 ConcurrentHashMap和Hashtable主要区别就是围绕着锁的粒度以及如何锁 左边便是Hashtable的实现方式---锁整个hash表:而右边则是ConcurrentHashMap的实现方式---锁桶(或段).ConcurrentHashMap将hash表分为16个桶(默认值),诸如get,put,remove等常用操作只锁当前需要用到的桶.试想,原来只能一个线程

源码分析--ConcurrentHashMap与HashTable(JDK1.8)

ConcurrentHashMap和Hashtable都是线程安全的K-V型容器.本篇从源码入手,简要说明它们两者的实现原理和区别. 与HashMap类似,ConcurrentHashMap底层也是以数组+链表+红黑树实现的,以Node节点封装K-V和hash. static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; volatile V val; volatile Node&l