HappyLei

记录点点滴滴的进步

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

并发容器

ConcurrentHashMap: synchronizedMap是支持并发的HashMap,使用了分段锁机制,效率比同步的HashMap更高。所谓分段锁:是在HashMap上分段加锁,这样当多个线程访问不同数据段就不会发生锁竞争。

ConcurrentSkipListMap:支持并发的排序映射表,SkipList是跳表:Skip list让已排序的数据分布在多层链表中

HashMap的性能参数,如图为hashMap的存储结构:数组+链表,当Hash值冲突时就用链表存储冲突的元素。

构建HashMap时的二个参数:容量(capacity),负载因子(loadfactor)。容量是hansmap的初始大小,当hashmap存储的元素接近容量大小时发生冲突的概率就会增加,性能就会下降。这时就需要扩容(resize),扩容之后就要重新rehash,重新计算元素的存储位置。

LinkedHashMap的存储结构:LinkedHashMap继承自HashMap,那么自然有HashMap一样的基本的存储结构,但阅读源码发现LinkedHashMap还有一个Header指针,这是一个存放访问次序的双向链表。构造LinkedHashMap时要比HashMap多一个Boolean型的accessOrder参数,该参数为true时,访问过某一个元素后,该元素就会被放在列表的最后。

LinkedHashMap的存储结构:

 

参考资料:

http://www.ibm.com/developerworks/cn/java/j-jtp04186/

http://blog.csdn.net/guangcigeyun/article/details/8278349

http://blog.csdn.net/guangcigeyun/article/details/8278349

http://ifeve.com/java-synchronousqueue/

http://zy19982004.iteye.com/category/243417

posted on 2014-06-21 12:51  HappyLei  阅读(234)  评论(0编辑  收藏  举报