JAVA绝对干货——List、Set、Map并发数据结构对比实现
2017-07-24 11:15
513 查看
http://blog.csdn.net/tianyijavaoracle/article/details/41645393
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并发应用场合,我们可以使用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的对比
- Java中常见数据结构:list与map -底层如何实现
- (7)Java数据结构--集合map,set,list详解
- 《partner4java 讲述 java基础》之第一步:list 、set 、map 粗浅性能对比分析
- javascript面向对象实现java常用的1StringBuffer,Map,Collection,List,Set
- Java数据结构Map,List,Set及Queue相关的类图
- Java中常见数据结构:list与map -底层如何实现
- 搞笑的java的list,set,map的继承关系(实现关系)
- JAVA 里的数据结构 Set List Map
- Java重要的数据结构Set,List,Map
- Java中常见数据结构:list与map -底层如何实现
- Java中常见数据结构:list与map -底层如何实现
- 对象容器 - Java对数据结构的封装 - List, ArrayList, LinkedList, Set, SortedSet, HashSet, Map, TreeMap
- Java编程的逻辑 (75) - 并发容器 - 基于SkipList的Map和Set
- Stack和Queue:后进先出和先进先出和Java 实现后进先出(LIFO)及Stac和Java集合类: Set、List、Map、Queue使用场景梳理 - .Little Hann
- 对象容器 - Java对数据结构的封装 - List, ArrayList, LinkedList, Set, SortedSet, HashSet, Map, TreeMap
- 《partner4java 讲述 java基础》之第一步:list 、set 、map 粗浅性能对比分析
- Java中的容器类List、Set、Map的对比