小谈ConcurrentHashMap

2018-06-18 03:54:41来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

面试的时候被面试官问了点相关知识,再次记录一些自己的总结

一.

1.HashTable也可实现线程安全,但是它是用synchronized实现的,所以其他线程访问HashTable的同步方法时,可能会进入阻塞状态。效率低。因为所有操作需要竞争同一把锁。

2.ConcurrentHashMap://jdk1.7中

(1)分段锁:多把锁,每一把锁锁一段数据,这样在多线程访问时不同段的数据时,就不存在锁竞争提高并发效率

(2)ConcurrentHashMap只有在求size,containsValue()等操作时才需要锁定整个表

3.JDK1.8中的ConcurrentHashMap

采用table数组元素作为锁,从而实现了对每一行数据进行加锁,进一步减少并发冲突的概率。

将原先table数组+单向链表的数据结构,变更为table数组+单向链表+红黑树的结构。

jdk1.8中采用了红黑树的结构,那么查询的时间复杂度可以由O(n)降低到O(logN),可以改进性能。

二.

Collections.synchronizedMap()方法:

实现原理:Collections定义了一个SynchronizedMap的内部类,这个类实现了Map接口.Collections.synchronizedMap()在操作HashMap时自动添加了synchronized来实现线程同步(不推荐使用)

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Java学习笔记24(Integer类)

下一篇:K:树与二叉树