搞懂JAVA集合类--线程安全问题(六)
来源:互联网 发布:淘宝帐号可以注销吗 编辑:程序博客网 时间:2024/05/19 23:24
基本的Java集合类中, 线程安全的有Venctor和Hashtable,其余的ArrayList,LinkedList,HashMap,HashSet,TreeSet,LinkedHashSet,HashMap,TreeMap都不线程安全。
可以由java.util.Collections来创建线程安全的集合,如:Connections.synchronizedSet; Connections.synchronizedList,Connections.synchronizedMap等,其简单的原理是每个方法都增加了synchronized来保证线程安全。效果和Venctor、Hashtable一样
这样做显然不太好,比如锁定2个线程的读操作是没有意义的
JDK1.5之后,提供了java.util.concurrent并发包,它提供的新集合类允许通过在语义中的少量更改来获得更高的并发。
CopyOnWriteArrayList 其中的set、add、remove等方法,都使用了ReentrantLock的lock()来加锁,unlock()来解锁。当增加元素的时候使用Arrays.copyOf()来拷贝副本,在副本上增加元素,然后改变原引用指向副本。
CopyOnWriteArraySet 使用了CopyOnWriteArrayList来存储数据,remove方法调用CopyOnWriteArrayList的remove方法。add方法调用了CopyOnWriteArrayList的addIfAbsent方法,addIfAbsent同样使用了ReentrantLock的lock()来加锁,unlock()来解锁。
ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁(由ReentrantLock来实现的)。只要多个修改操作发生在不同的段上,它们就可以并发进行。
- 搞懂JAVA集合类--线程安全问题(六)
- java 集合中线程安全问题
- Java集合中的线程安全问题
- java集合中的线程安全问题
- 搞懂JAVA集合类--HashMap(三)
- 关于集合类的线程安全问题
- 集合的线程安全问题
- 搞懂JAVA集合类--集合类框架(一)
- 集合遍历的线程安全问题
- 集合框架的线程安全问题
- 搞懂JAVA集合类--HashTable, LinkedHashMap, TreeMap(四)
- 搞懂JAVA集合类--HashSet, LinkedHashSet, TreeSet(五)
- Java多线程设计(三)线程安全问题
- Java线程安全问题
- java线程安全问题笔记
- java线程编程安全问题
- java之线程安全问题
- java线程安全问题
- Apple Pay 技术分享_陈hong_鑫
- xcode调试记录
- MPAndroidChart 教程:数据格式器 ValueFormatter(五)
- 机器学习&深度学习学习资源
- JAVA基础 day25 网络编程 IP类 UDP,TCP传输学习 简易聊天工具 TCP并发学习
- 搞懂JAVA集合类--线程安全问题(六)
- MPAndroidChart 教程:图表的具体设置 Specific chart settings(六)
- MapReduce 基本模版与WordCount代码
- map集合遍历
- Acticle 18:jquery基础(基本选择器)具体实例
- POJ 3349 - 数值哈希(这辈子只服数据量)
- 验证整数、小数、实数、有效位小数最简单JavaScript正则表达式
- Hiveserver2 beeline error java.io.FileNotFoundException: minlog-1.2.jar
- 在windows下将Mongodb注册为服务,报错