关于java中有关集合的知识点,相信大家还是有所了解的。集合中所包含的知识点是非常丰富的,而且可以细分为很多类型。今天就来为大家介绍一下并发集合的有关知识,并且用实际代码为大家展示,一起来看看吧。
首先我们需要知道的是,并发集合是jdk5.0重要的特性,增加了并发包java.util.concurrent.*。Java内存模型、volatile变量及AbstractQueuedSynchronizer(简称AQS同步器),是并发包众多实现的基础。
常见的并发集合:
1.ConcurrentHashMap:线程安全的hashmap的实现
2.CopyOnWriteArrayList:线程安全且在读操作时无锁的ArrayList
3.CopyOnWriteArraySet:基于CopyOnWriteArrayList,不添加重复元素
4.ArrayBlockingQueue:基于数组、先进先出、线程安全,可实现指定时间的阻塞读写,并且容量可以限制
5.LinkedBlockingQueue:基于链表实现,读写各用一把锁,在高并发读写操作都多的情况下,性能优于ArrayBlockingQueue
另外说一下,CopyOnWrite集合即写时复制的集合
通俗的理解是当我们往一个集合添加元素的时候,不直接往当前集合添加,而是先将当前集合进行Copy,复制出一个新的集合,然后新的集合里添加元素,添加完元素之后,再将原集合的引用指向新的集合。
这样做的好处是我们可以对CopyOnWrite集合进行并发的读,而不需要加锁,因为当前集合不会添加任何元素。所以CopyOnWrite集合也是一种读写分离的思想,读和写不同的集合。
实例代码展示如下:
package com.ifeve.book; import java.util.Map; import com.ifeve.book.forkjoin.CopyOnWriteMap; /** * 黑名单服务 * * @author fangtengfei * */ public class BlackListServiceImpl { private static CopyOnWriteMap < String, Boolean > blackListMap = new CopyOnWriteMap < String, Boolean > ( 1000); public static boolean isBlackList(String id) { return blackListMap.get(id) == null ? false : true; } public static void addBlackList(String id) { blackListMap.put(id, Boolean.TRUE); } /** * 批量添加黑名单 * * @param ids */ public static void addBlackList(Map < String, Boolean > ids) { blackListMap.putAll(ids); } }
另外需要注意的是:
1.减少扩容开销。根据实际需要,初始化CopyOnWriteMap的大小,避免写时CopyOnWriteMap扩容的开销。
2.使用批量添加。因为每次添加,容器每次都会进行复制,所以减少添加次数,可以减少容器的复制次数。如使用上面代码里的addBlackList方法。
关于并发集合的相关知识你都了解了吗?具体的代码已经为大家展示出来了。如果你对java知识感兴趣,想要了解更多java基础知识,敬请关注奇Q工具网。
推荐阅读: