并发容器和工具

Posted huanstephen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发容器和工具相关的知识,希望对你有一定的参考价值。

为什么要使用ConcurrentHashMap?

  在多线程环境下,会用HashMap进行put操作会引起死循环,导致CPU利用率接近100%。因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点用不为空,就会产生死循环获取Entry。

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

 

ConcurrentHashMap分析

  Hash是一种散列,数据结构是以数组+链表的结构组成,输入元素通过固定算法分配到相应链表上,在ConcurrentHashMap中使用的是wang/jenkins算法分配元素。

JDK1.7下的实现

  在JDK1.7中使用的是分段锁的设计思想。该思想是由Segment数据结构额和HashEntry数据结构组成。Segment实际是一种可重入锁(ReentrantLock),HashEntry则用于存储键值对数据。

以上是关于并发容器和工具的主要内容,如果未能解决你的问题,请参考以下文章

Java并发编程学习6-同步工具类和并发容器

java并发编程之工具类

并发容器和工具

java并发编程要点速览(Java并发容器和框架,原子操作类,并发工具类)

Java并发--同步容器

最全Java并发编程技能:多线程+线程池+线程锁+并发工具+并发容器