java中常见并发集合有哪些?详细解析

BSO 2020-11-28 15:36:00 java常见问答 6550

关于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工具网。

推荐阅读:

java 9新增的不可变集合详解

java Set集合,set集合常用方法有哪些?

java 8 Stream操作Collection集合详解