JAVA绝对干货——List、Set、Map并发数据结构对比实现
来源:互联网 发布:node.js query 编辑:程序博客网 时间:2024/06/08 16:41
JAVA并发数据结构对比实现
在对List、Set、Map并发应用场合,我们可以使用Collections的下面方法将非线程安全List、set、Map转化为线程安全的。但是效率并不是最好的,JDK提供了专门的线程安全List与Set实现类,后面我们将讨论下他们的具体实现。
一、CopyOnWriteArrayList与Vector实现讨论
CopyOnWriteArrayList与Vector是两个线程安全的List,ArrayList不是线程安全的。下面我们对比下这两个线程安全List的实现方式有什么不同,各有什么优点与缺点。
1. CopyOnWriteArrayList get()方法实现如下图
CopyOnWriteArrayList get方法没有进行任何锁。所以效率要高。
2. Vector的get方法实现如下:
Vector的get方法增加了锁,所以对比两者get方法的,可以说明CopeOnWriteArrayList读取更高效。
3. 下面我们对比Vector与CopyOnWriteArrayList 在添加数据方面的实现方法对比。
Vector 的add()方法实现如下图:
4. CopyOnWriteArrayList 的add()方法实现如下图:
CopyOnWriteArrayList add方法实现是先进行锁定,再拷贝数组,添加新元素后,再写入,相比Vector单纯的锁定比,CopyOnWriteArrayList 添加方法效率应该低些。所以
并发写多情况下建议用Vector,并发读多的情况下建议用CopyOnWriteArrayList 。
二、并发Set
CopyOnWriteArraySet是实现了Set接口线程安全的。内部依赖于CopyOnWriteArrayList,因此适合读多写少的并发。
三、并发Map
JDK提供了高并发的Map实现ConcurrentHashMap.它的get是无锁的,但是put是有锁的。
四、并发Queue
ConcurrentLinkedQueue是一个适用于高并发场景下 队列。它通过无锁的方式,实现了高并发状态下的高性能,通常它的性能好于BlockingQueue的典型实现ArrayBlockingQueue、LinkedBlockingQueue.
五、并发Deque
Deque是一个种双端队列,可以在头部或尾部进行出队入队。
实现类有 ArrayDeque、LinkedBlockingDeque.
其中LinkedBlockingDeque是线程安全的,但是读写都加锁,所以效率不是特别高。
- JAVA绝对干货——List、Set、Map并发数据结构对比实现
- JAVA绝对干货——List、Set、Map并发数据结构对比实现
- List、Set、Map对比
- JAVA 里的数据结构 Set List Map
- Java数据结构 List Map Set Collection Collections
- Java数据结构Collection、Set,List,Map
- Java重要的数据结构Set,List,Map
- Java数据结构之List、Set、Map集合
- 数据结构 list map set
- JAVA之——List,Set,Map
- Java—Set,List,Map的区别
- Java集合类—List,Set,Map
- set list map 集合对比
- List,Set,Map 的对比
- java 集合类结构图 List Set Map 对比
- Java中的容器类List、Set、Map的对比
- Java中的Map、Set、List及其实现
- 常用数据结构 List set map
- 补---第十三周项目6(从文件中读取工人工资)
- mysql热备
- 使用JUnit测试Java类的私有方法
- Linux下Socket编程简单demo示例
- VB.net总结
- JAVA绝对干货——List、Set、Map并发数据结构对比实现
- JAVA类和对象
- 如何避免设计中有廉价的感觉
- 利用"NOTIFYICONDATA"实现MFC的托盘程序
- JAVA执行bat文件和shell脚本文件
- 由于归档日志飘移导致OGG抓取进程停止(OGG-01028)
- 如何修改手机默认日期
- Android wav音频解码混音算法的JNI实现
- centos遇到的问题及解决办法