首页 > 其他 > 详细

并发容器和工具

时间:2018-01-09 22:38:09      阅读:197      评论:0      收藏:0      [点我收藏+]

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

并发容器和工具

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!