Java1.5提供了多种并发容器类来改进同步容器的性能。

同步容器将所有对容器的访问都串行化,以实现他们的线程安全性。这种方法的代价是严重降低并发性,当多个线程竞争容器的锁时,吞吐量将严重减低。

 一、基础集合替代的同步类

ConcurrentHashMap 替代同步的且基于散列的Map: HashTable、Collections.synchronizedMap(new HashMap());

CopyOnWriteArrayList用于在遍历操作为主要操作的情况下替代同步的List:Vector ,或是Collections.synchronizedMap(new ArrayList());

CopyOnWriteArraySet 用于在遍历操作为主要操作的情况下替代同步的Set:Collections.synchronizedMap(new HashSet());

二、有序集合替代的同步类

ConcurrentSkipListMap 替代 同步的 SortedMap  : Collections.synchronizedMap(new TreeMap())

ConcurrentSkipListSet  替代 同步的 SortedSet   :   Collections.synchronizedMap(new TreeMap(new TreeSet()))

三、阻塞与非阻塞队列

Queue : 用来临时处理一组等待处理的数据,非阻塞,如果为空,获取元素的返回值为null。用LinkedList实现的。

  ConcurrentLinkedQueue:先进先出

  PriorityQueue:非并发的优先队列

BlockingQueue:阻塞队列,拓展了Queue,增加了可阻塞的插入和获取等操作,如果队列为空,那么获取元素操作将一直阻塞。用于生产者消费者模式中。


四、双端队列 : 实现了在队列头和队列尾的高效插入和移除。

适用模式:工作密取(Work Stealing)。

Deque extends Queue

  • ArrayDeque

  • ConcurrentLinkedDeque
  • LinkedList

BlockingDeque extends BlockingQueue

  

  • LinkedBlockingDeque

生产者——消费者模式  |  阻塞队列 | 所有消费者消费同一个队列 | 多线程并发竞争队列

工作密取        |  双端队列 | 即是生产者又是消费者   | 消费线程消费自己的队列头,不竞争!消费没自己的再消费其它队列的尾,不竞争



java Concurrent并发容器类 小结的更多相关文章

  1. [Java Concurrent] 并发访问共享资源的简单案例

    EvenGenerator 是一个偶数生成器,每调用一个 next() 就会加 2 并返回叠加后结果.在本案例中,充当被共享的资源. EvenChecker 实现了 Runnable 接口,可以启动新 ...

  2. java concurrent 并发多线程

    Concurrent 包结构 ■ Concurrent 包整体类图 ■ Concurrent包实现机制 综述: 在整个并发包设计上,Doug Lea大师采用了3.1 Concurrent包整体架构的三 ...

  3. 《java并发编程实战》读书笔记4--基础构建模块,java中的同步容器类&并发容器类&同步工具类,消费者模式

    上一章说道委托是创建线程安全类的一个最有效策略,只需让现有的线程安全的类管理所有的状态即可.那么这章便说的是怎么利用java平台类库的并发基础构建模块呢? 5.1 同步容器类 包括Vector和Has ...

  4. 深透清晰理解Java高并发概述

    1.多线程安全性 多线程安全性的定义可能众说纷纭,但是其最核心的一点就是正确性,也就是程序的行为结果和预期一致. 当多个线程访问某个类时,不管运行环境采用何种线程调度算法或者这些线程如何交替执行,且不 ...

  5. Java多线程并发05——那么多的锁你都了解了吗

    在多线程或高并发情境中,经常会为了保证数据一致性,而引入锁机制,本文将为各位带来有关锁的基本概念讲解.关注我的公众号「Java面典」了解更多 Java 相关知识点. 根据锁的各种特性,可将锁分为以下几 ...

  6. Java:并发笔记-09

    Java:并发笔记-09 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 7. 共享模型之工具-2 原理:AQS 原理 对于 AQS 的原理这部分内容,没很好的 ...

  7. Java:并发笔记-04

    Java:并发笔记-04 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 本章内容-3 线程状态转换 活跃性 Lock 3.10 重新理解线程状态转换 假设有线 ...

  8. Java:并发笔记-01

    Java:并发笔记-01 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 1. 进程与线程 本章内容 进程和线程的概念 并行和并发的概念 线程基本应用 1.1 ...

  9. Java多线程-并发容器

    Java多线程-并发容器 在Java1.5之后,通过几个并发容器类来改进同步容器类,同步容器类是通过将容器的状态串行访问,从而实现它们的线程安全的,这样做会消弱了并发性,当多个线程并发的竞争容器锁的时 ...

随机推荐

  1. mysql partition分区

    (转) 自5.1开始对分区(Partition)有支持 = 水平分区(根据列属性按行分)=举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录. === 水 ...

  2. pip 升级 pip

    For Python2 sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade pip For Python3 ...

  3. Linux内存都去哪了:(1)分析memblock在启动过程中对内存的影响

    关键词:memblock.totalram_pages.meminfo.MemTotal.CMA等. 最近在做低成本方案,需要研究一整块RAM都用在哪里了? 最直观的的就是通过/proc/meminf ...

  4. 在Web界面中实现Excel数据大量导入的处理方式

    在早期Bootstrap框架介绍中,我的随笔<结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传.预览.提交的导入Excel数据操作流程> ...

  5. AWT的应用

    AWT(Abstract Window TookIT)是java用于创建用户界面和绘制图形的所有类 AWT组件和容器 AWT包含了很多类和接口,用于java Application的GUI(图形用户界 ...

  6. Python Revisited Day 05(模块)

    目录 5.1 模块与包 5.1.1 包 5.2 Python 标准库概览 5.2.1 字符串处理 io.StringIO 类 5.2.3 命令行设计 5.2.4 数学与数字 5.2.5 时间与日期 5 ...

  7. mybatis 使用resultMap实现表间关联

    AutoMapping auto mapping,直译过来就是自动映射,工作原理大概如下: 假设我们有一张表,表名为person,包含id,name,age,addr这4个字段 mysql> d ...

  8. Flask 快速使用 进阶—— (2)

    案例:可配置发送信息的系统 假如我们有这样的一个系统,可以发送短息,邮件和微信,后期可能还会增加一些平台,怎么才可以做到快速切换的去使用某种功能呢,在这里我会通过在配置文件中简单的配置就可以实现 在项 ...

  9. 采用VSPD、ModbusTool模拟串口、MODBUS TCP设备进行Python采集软件开发

    版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 不少仪器/设备都提供了数据采集的接口,其中不少是串口或网络的MODBUS/TCP协议. 串口是比较简单 ...

  10. Linux centos7.5操作系统的安装

    安装centos7.5 1.1 新建虚拟机 1.2 选择客户机系统和版本 1.3 更改虚拟机名称和创建地址.   1.4 选择网络类型 1.5 自定义硬件,选择添加centos7.5镜像 1.6 开机 ...