Concurrenthasmap
2017-06-29 17:50
513 查看
Concurrenthasmap
首先我们来说一下hasmap和hastable的区别hasmap是线程非安全的,hastable是线程安全的效率低下的HashTable容器
hastable 多线程访问时,将并行转换成串行,一次只能有一个访问,当操做完之后,下一个线程才能进入,效率低,当一个线程访问HashTable的同步方法时,其他线程访问HashTable的同步方法时,可能会进入阻塞或轮询状态。如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,并且也不能使用get方法来获取元素,所以竞争越激烈效率越低。还存在复合操作上的安全问题。(符合操作:例如:若不存在则添加,先判断是否存在,在进行添加,如果在判断之后操作权限被剥夺及contants存在锁,put存在锁,但是contants和put同时操作时不存在锁,也存在安全问题)Concurrenthasmap
在jdk1.5提供了线程安全的容器类,其中Concurrenthasmap是比较常用的,提供了“锁分段”机制ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据。一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类似,是一种数组和链表结构, 一个Segment里包含一个HashEntry数组,每个HashEntry是一个链表结构的元素, 每个Segment守护者一个HashEntry数组里的元素,当对HashEntry数组的数据进行修改时,必须首先获得它对应的Segment锁。
锁分段:首先我们来了解一下,其中的一个并发级别Concurrentlevel默认为16,因为默认有16个分段,每个段有独立的表,每个表中有链表。每个段是一个独立的锁(当多个线程并发访问时,访问不同的段,不会发生冲突,所以可以有并行的效果,效率要高,还提供了符合操作的方法)
之前我们使用collections类提供的同步方法,将每个方法加了一个synchronized关键字
List list = Collections.synchronizedList(new ArrayList<>()); 将每个方法加了一个synchronized关键字
jdk1.8分段锁被取消了,采用了CAS算法(不会阻塞)
未完待续。。。。
相关文章推荐
- HashMap的非线程安全性和ConcurrentHasMap
- Java Concurrency代码实例之七-ConcurrentSkipListMap
- HashMap 和 concurrentHaspMap 的陷阱与区别
- Java里多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)
- Qt QConcurrent Map-reduce.
- 图层损坏 E/ArcGIS﹕ The map or layer has been destroyed or recycled. 资源未释放
- Java多线程 -- JUC包源码分析18 -- ConcurrentSkipListMap(Set)/TreeMap(Set)/无锁链表
- 线程同步模型, 生产者/消费者, 读写同步,线程池,concurrent map.
- ConcurrentHashMap Collections.synchronizedMap和Hashtable讨论
- Map中删除数据报:java.util.ConcurrentModificationException异常
- Docker 数据卷查看 映射的目录出错(Template parsing error: template: :1:2: executing "" at <.Volumes>: map has no)
- Java - Difference between ConcurrentHashMap, Hashtable and Synchronized Map
- Collection 或 Map 进行迭代操作抛出 java.util.ConcurrentModificationException 异常
- ConcurrentSkipListMap、ConcurrentLinkedQueue实现高并发原理探究
- ConcurrentSkipListMap 常用的方法
- HasgMap和Map的遍历方式
- java并发包分析之———ConcurrentSkipListMap
- Java并发集合(二)-ConcurrentSkipListMap分析和使用
- Java并发JUC包之ConcurrentSkipListMap深入分析
- Map 非线程安全的证明 以及线程安全方案(Concurrent)