ConcurrentHashMap 并发哈希映射

简介: 1.与hashtable的比较 1.1效率低下的HashTable容器      HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,其他线程也想访问HashTable的同步方法,就会进入阻塞或轮询状态。 如线程1使用put进行添加元素,线程2不但不能使用pu

1.与hashtable的比较

1.1效率低下的HashTable容器

     HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,其他线程也想访问HashTable的同步方法,就会进入阻塞或轮询状态。
如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,并且也不能使用get方法来获取元素,所以竞争越激烈效率越低。

图1-1 hashtable中在put()方法上加锁

1.2ConcurrentHashMap的锁分段技术

     HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable的线程都必须竞争同一把锁。那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,
那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术。


图1-2 ConcurrentHashTable中的put()方法,使用分段锁



目录
相关文章
|
6月前
|
设计模式 安全 Java
为什么有了并发安全的集合还需要读写锁?
这篇文章想来跟大家来探讨一下,在Java中已经提供了并发安全的集合,为什么有的场景还需要使用读写锁,直接用并发安全的集合难道不行么?
|
7月前
|
存储 安全 Java
ConcurrentHashMap底层实现原理
ConcurrentHashMap底层实现原理
107 0
|
7月前
|
存储 安全 Java
ConcurrentHashMap是如何保证线程安全的?
ConcurrentHashMap相当于是HashMap的多线程版本,它的功能本质上和HashMap没什么区别。因为HashMap在并发操作的时候会出现各种问题,比如死循环问题、数据覆盖等问题。而这些问题,只要使用ConcurrentHashMap就可以完美地解决。那问题来到了,ConcurrentHashMap它是如何保证线程安全的呢?
69 0
|
8月前
|
安全 Java 编译器
HashMap, HashTable, ConcurrentHashMap 之间的区别
HashMap, HashTable, ConcurrentHashMap 之间的区别
58 0
|
4月前
|
安全 容器
线程安全的集合类(多线程环境下使用ArrayList、队列及哈希表)
线程安全的集合类(多线程环境下使用ArrayList、队列及哈希表)
|
8月前
|
安全
浅谈HashTable, HashMap, ConcurrentHashMap 之间的区别
浅谈HashTable, HashMap, ConcurrentHashMap 之间的区别
|
12月前
|
安全
集合类在并发情况下如何保证线程安全
在正常单线程的情况下不会出现问题,当多线程的时候,List会出现 java.util.ConcurrentModificationException 这种异常
66 0
|
12月前
|
存储 安全 算法
HashMap、HashTable、ConcurrentHashMap 之间的区别
哈喽,大家好~我是保护小周ღ,本期为大家带来的是 HashMap、HashTable、ConcurrentHashMap 之间的区别,从数据结构到多线程安全~确定不来看看嘛~ 更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* ‘
|
监控 安全
记一次ArrayList使用不当引起的并发问题
小卷今天收到业务方反馈,调用接口有异常发生,而且随着流量增大,异常也增多了。小卷赶紧查看监控日志,发现ArrayIndexOutOfBoundsException数组越界异常变多了。于是开始进行排查。
173 0
记一次ArrayList使用不当引起的并发问题
|
存储 缓存 算法
如何实现一个优秀的 HashTable 散列表?
在前几篇文章里,我们聊到了 Java 中的几种线性表结构,包括 ArrayList、LinkedList、ArrayDeque 等。今天,我们来讨论另一种常用的基础数据结构,同时也是 “面试八股文” 的标准题库之一 —— 散列表(Hash Table)。
61 0