关于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  blackListMap = new CopyOnWriteMap  (

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  ids)

{

blackListMap.putAll(ids);

}

}

另外需要注意的是:

1.减少扩容开销。根据实际需要,初始化CopyOnWriteMap的大小,避免写时CopyOnWriteMap扩容的开销。

2.使用批量添加。因为每次添加,容器每次都会进行复制,所以减少添加次数,可以减少容器的复制次数。如使用上面代码里的addBlackList方法。

关于并发集合的相关知识你都了解了吗?具体的代码已经为大家展示出来了。如果你对java知识感兴趣,想要了解更多java基础知识,敬请关注奇Q工具网。

推荐阅读:

java并发集合有哪些_java中常见并发集合有哪些?详细解析相关推荐

  1. java对集合的操作_Java中对List集合的常用操作

    目录: list中添加,获取,删除元素: list中是否包含某个元素: list中根据索引将元素数值改变(替换): list中查看(判断)元素的索引: 根据元素索引位置进行的判断: 利用list中索引 ...

  2. java中常见的限流算法详细解析

    目录 前言 1. 验证限流以及容器限流 2. 服务端限流 2.1 固定时间窗口 2.2 滑动时间窗口 2.3 漏桶算法 2.4 令牌桶算法 前言 以下的文章参考了一些具体的资料加深了解 B站:Java ...

  3. PHP中使用CURL之php curl详细解析和常见大坑

    这篇文章主要介绍了PHP中使用CURL之php curl详细解析和常见大坑 ,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 七夕啦,作为开发,妹子没得撩就"撩"下服务器 ...

  4. Linux内核中内存管理相关配置项的详细解析3

    接前一篇文章:Linux内核中内存管理相关配置项的详细解析2 5. 2:1 compression allocator (zbud) 对应配置变量为:CONFIG_ZBUD. 此项默认为选中(如果前一 ...

  5. Java中常见的集合框架及常用的方法

    本篇文章主要说明Java中一些常见的集合框架及经常用到的一些方法 , 由于都是一些父类 , 所以没有做太深入的分析说明 , 后面的文章将会分别对List , Set , Map及其常用子类进行深入研究 ...

  6. Java并行有优势吗_Java中不同的并发实现的性能比较

    Fork/Join框架在不同配置下的表现如何? 正如即将上映的星球大战那样,Java 8的并行流也是毁誉参半.并行流(Parallel Stream)的语法糖就像预告片里的新型光剑一样令人兴奋不已.现 ...

  7. java常见的报错_Java中常见的错误有哪些?

    原标题:Java中常见的错误有哪些? 1.java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 原因: 1.对系统所访 ...

  8. java 三大集合_java中的三大集合入门笔记(简单实用)

    为什么使用集合框架 如图: 集合的好处: 集合弥补了数组的缺陷,它比数组更灵活更实用,可大大提高软件的开发效率,而且不同的集合适用于不同的场合. Java集合主要分为以下3种类型 Java集合框架提供 ...

  9. java中两种遍历集合的方式_Java中Map集合的两种遍历方式

    Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...

最新文章

  1. 解决Table td设置了相同百分比,由于文字个数不同导致列宽不同问题
  2. 找找Amazon的A9算法更新和变化的蛛丝马迹!
  3. python linux解密zip_Python Linux系统管理之使用Python管理压缩包
  4. Alpha冲刺第二天
  5. 初级程序员为避免淘汰该怎么办?
  6. 《WinForm开发系列之控件篇》Item31 MenuStrip(暂无)
  7. HttpClient FormUrlEncodedContent System.UriFormatException: 无效的 URI: URI 字符串太长问题解决方案
  8. 搭积木php编程,Primo Toys,一款可以同时搭积木与编程的玩具
  9. 按键精灵--VS挤房器_Fly_v2.5版
  10. 通过 Nginx 来实现禁止国外IP访问网站
  11. 用Python绘制标准时钟
  12. Vue制作图片翻面效果
  13. C|倒三角(trangle)
  14. word文件损坏打不开如何修复?文件丢失怎么办?
  15. python 字典的常见方法
  16. 如何选择语音短信通知?语音短信通知接入教程
  17. Event-B 形式化方法
  18. oracle exp 导出字符集,oracle exp/imp 字符集
  19. live.cn邮箱注册帐号方法
  20. BDYX 电话面试题目

热门文章

  1. excel工具栏隐藏了怎么办_真正的EXCEL隐藏技巧来啦!这5个你都会吗?
  2. php扩展兼容,PHP扩展迁移为PHP7扩展兼容性问题记录,php7兼容性_PHP教程
  3. 项目上线简化流程介绍
  4. Echarts4.0 使用系列——折线图,这里可能有你需要的
  5. 根据STATUS信息对MySQL进行优化
  6. mysql 插入汉字 异常 Incorrect string value: '\xE8\xA7\x84\xE5\x88\x99' for column 'name'
  7. NTP 时间同步流量使用过大 问题解决
  8. SQL判断文件是否存在
  9. 对ActiveRecord的评论
  10. JS - Promise使用随笔