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()方法,使用分段锁



相关文章
|
存储 缓存 算法
如何实现一个优秀的 HashTable 散列表?
在前几篇文章里,我们聊到了 Java 中的几种线性表结构,包括 ArrayList、LinkedList、ArrayDeque 等。今天,我们来讨论另一种常用的基础数据结构,同时也是 “面试八股文” 的标准题库之一 —— 散列表(Hash Table)。
85 0
|
8月前
|
安全 算法 Java
ConcurrentHashMap并发哈希表的设计与实现
ConcurrentHashMap并发哈希表的设计与实现
|
10月前
|
安全 容器
线程安全的集合类(多线程环境下使用ArrayList、队列及哈希表)
线程安全的集合类(多线程环境下使用ArrayList、队列及哈希表)
|
监控 Java 数据库
一次 HashSet 所引起的并发问题(上)
首先了解下这个应用大概是做什么的。 简单来说就是从 MQ 中取出数据然后丢到后面的业务线程池中做具体的业务处理。 而报警的队列正好就是这个线程池的队列。
|
SQL 缓存 运维
一次 HashSet 所引起的并发问题(下)
首先了解下这个应用大概是做什么的。 简单来说就是从 MQ 中取出数据然后丢到后面的业务线程池中做具体的业务处理。 而报警的队列正好就是这个线程池的队列。
|
存储 算法 Java
HashMap如何解决哈希冲突?
HashMap如何解决哈希冲突?
HashMap如何解决哈希冲突?
ConcurrentHashMap和HashTable的区别
hashtable是做了同步的,hashmap未考虑同步。所以hashmap在单线程情况下效率较高。hashtable在的多线程情况下,同步操作能保证程序执行的正确性。 但是hashtable每次同步执行的时候都要锁住整个结构。看下图: 图左侧清晰的标注出来,lock每次都要锁住整个结构。 ConcurrentHashMap正是为了解决这个问题而诞生的。
1659 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等