当前位置: 代码迷 >> 综合 >> HashMap+ConcurrentHashMap+HashTable
  详细解决方案

HashMap+ConcurrentHashMap+HashTable

热度:12   发布时间:2023-12-06 03:41:36.0

1.HashMap

hashmap是一个“链表散列”的数据结构,即数组和链表的结合体。

hashmap是线程不安全的,再多线程环境下使用hashmap进行put操作会引起死循环,导致CPU利用率接近100%,因此在并发情况下不能使用hashmap


2.HashTable

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

3.ConcurrentHashMap

一个ConcurrentHashMap 由多个segment 组成,每个segment 包含一个Entity 的数组。这里比HashMap 多了一个segment 类。该类继承了ReentrantLock 类,所以本身是一个锁。当多线程对ConcurrentHashMap 操作时,不是完全锁住map, 而是锁住相应的segment 。这样提高了并发效率。[首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。]

1、ConcurrentHashMap是由Segment数组结构组成。

2、Segment是由HashEntry数组结构组成,并且Segment本身继承了可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色。

3、HashEntry是真正用于存储键值对数据的地方,HashEntry是一个链表结构。

  相关解决方案