码迷,mamicode.com
首页 > 其他好文 > 详细

并发容器和工具

时间:2018-01-09 23:16:58      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:100%   情况   为什么   阻塞   并发容器   添加元素   环境   ext   同步方法   

为什么要使用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则用于存储键值对数据。

并发容器和工具

标签:100%   情况   为什么   阻塞   并发容器   添加元素   环境   ext   同步方法   

原文地址:https://www.cnblogs.com/huanStephen/p/8253991.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!