2019独角兽企业重金招聘Python工程师标准>>>

并发容器的简单介绍

JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了并发性,当多个线程竞争容器时,吞吐量严重降低。因此Java5.0开始针对多线程并发访问设计,提供了并发性能较好的并发容器,引入了java.util.concurrent包。与Vector和Hashtable、Collections.synchronizedXxx()同步容器等相比,util.concurrent中引入的并发容器主要解决了两个问题:

  • 1)根据具体场景进行设计,尽量避免synchronized,提供并发性。
  • 2)定义了一些并发安全的复合操作,并且保证并发环境下的迭代操作不会出错。

util.concurrent中容器在迭代时,可以不封装在synchronized中,可以保证不抛异常,但是未必每次看到的都是"最新的、当前的"数据。

并发容器类简单介绍

ConcurrentHashMap

  • 对应的非并发容器:HashMap
  • 目标:代替Hashtable、synchronizedMap,支持复合操作
  • 原理:JDK6中采用一种更加细粒度的加锁机制Segment“分段锁”,JDK8中采用CAS无锁算法。

CopyOnWriteArrayList

  • 对应的非并发容器:ArrayList
  • 目标:代替Vector、synchronizedList
  • 原理:利用高并发往往是读多写少的特性,对读操作不加锁,对写操作,先复制一份新的集合,在新的集合上面修改,然后将新集合赋值给旧的引用,并通过volatile 保证其可见性,当然写操作的锁是必不可少的了。

CopyOnWriteArraySet

  • 对应的费并发容器:HashSet
  • 目标:代替synchronizedSet
  • 原理:基于CopyOnWriteArrayList实现,其唯一的不同是在add时调用的是CopyOnWriteArrayList的addIfAbsent方法,其遍历当前Object数组,如Object数组中已有了当前元素,则直接返回,如果没有则放入Object数组的尾部,并返回。

ConcurrentSkipListMap

  • 对应的非并发容器:TreeMap
  • 目标:代替synchronizedSortedMap(TreeMap)
  • 原理:Skip list(跳表)是一种可以代替平衡树的数据结构,默认是按照Key值升序的。Skip list让已排序的数据分布在多层链表中,以0-1随机数决定一个数据的向上攀升与否,通过”空间来换取时间”的一个算法。ConcurrentSkipListMap提供了一种线程安全的并发访问的排序映射表。内部是SkipList(跳表)结构实现,在理论上能够在O(log(n))时间内完成查找、插入、删除操作。

ConcurrentSkipListSet

  • 对应的非并发容器:TreeSet
  • 目标:代替synchronizedSortedSet
  • 原理:内部基于ConcurrentSkipListMap实现

ConcurrentLinkedQueue

  • 不会阻塞的队列
  • 对应的非并发容器:Queue
  • 原理:基于链表实现的FIFO队列(LinkedList的并发版本)

LinkedBlockingQueue、ArrayBlockingQueue、PriorityBlockingQueue

  • 对应的非并发容器:BlockingQueue
  • 特点:拓展了Queue,增加了可阻塞的插入和获取等操作
  • 原理:通过ReentrantLock实现线程安全,通过Condition实现阻塞和唤醒
  • 实现类:
    • LinkedBlockingQueue:基于链表实现的可阻塞的FIFO队列
    • ArrayBlockingQueue:基于数组实现的可阻塞的FIFO队列
    • PriorityBlockingQueue:按优先级排序的队列

转载于:https://my.oschina.net/cqqcqqok/blog/2231299

java并发编程——并发容器类介绍相关推荐

  1. python并发编程调优_Python并发编程-并发解决方案概述

    Python并发编程-并发解决方案概述 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.并发和并行区别 1>.并行(parallel) 同时做某些事,可以互不干扰的同一个时 ...

  2. Java并发编程-并发工具包(java.util.concurrent)使用指南(全)

    1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Ja ...

  3. Java并发编程-并发工具包java.util.concurrent使用指南

    译序 本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新 本指南已做成中英文对照阅读版的 pdf 文档,有兴趣的朋友可以去 Java并发工具包java.util.concurren ...

  4. java并发编程并发容器_Java并发编程:同步容器

    为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch).今天我们就来讨论下同步容器. ...

  5. Java并发编程—并发和并行、线程上下文

    文章目录 并发和并行 并发和并行的区别 上下文切换 相关问题 为什么循环次数少的情况下,单线程快? 什么时候需要用多线程? 线程上下文切换消耗的时长? 用什么测试的线程上下文?面试回答下面的工具会加分 ...

  6. java并发编程(并发编程的三个问题)

    什么是并发编程? 首先我们要知道什么是并发? 什么是并行? 并行: 多件事情在同一时刻同时发生 并发: 在同一时间内,多个事情交替执行 并发编程: 比如抢票,秒杀等在同一场景下,有大量的请求访问同一资 ...

  7. java并发编程——并发编程的挑战

    本文是阅读<Java并发编程的艺术>后将自己记忆的理论知识和理解复写出来的产物,若有不足,欢迎指正! java并发编程是什么?让多个线程同时处理一个任务,从而达到快速的效果.但不是所有场景 ...

  8. (五)并发编程之容器类

    java.util.ConcurrentModificationException 标题的错误是由于多线程并发争抢修改导致的,在并发编程中使用线程不安全的容器导致的 下面晒出导致错误的例子: pack ...

  9. lingo编程的主要方法_java并发编程 --并发问题的根源及主要解决方法

    并发问题的根源在哪 首先,我们要知道并发要解决的是什么问题?并发要解决的是单进程情况下硬件资源无法充分利用的问题.而造成这一问题的主要原因是CPU-内存-磁盘三者之间速度差异实在太大.如果将CPU的速 ...

最新文章

  1. XPath crash course note
  2. win7网站服务器空间怎么清理,win7如何清理c盘空间_win7磁盘空间不足怎么清理
  3. 让设计模式在开始就拯救你的项目
  4. 安装spark集群,并成功运行
  5. OpenGL水波纹效果
  6. 震惊! Rightmost Digit 快速幂解决
  7. Linux 两台服务器之间传输文件和文件夹
  8. SQL Prompt
  9. SpringBoot +esapi 实现防止xss攻击
  10. C语言基础入门一(自学笔记)
  11. 王阳明心学:无善无恶心之体,有善有恶意之动,知善知恶是良知,为善去恶是格物。...
  12. 你真的了解LinkedBlockingQueue的put,add和offer的区别吗
  13. 《数值分析》-- 复化求积公式
  14. matlab实现简单图形的识别
  15. [转载]快速提高你修养的100句话,值得你珍藏
  16. okcc呼叫中心系统防封号系统的工作原理
  17. 【BZOJ30472125】Freda的传呼机
  18. python命令窗口代码如何调整大小_如何调整python窗口(Tkinter)大小
  19. 什么是PHP?它的擅长领域是什么?它的工作原理是什么?
  20. 计算机导论基础论文3000字,计算机导论课论文3000字

热门文章

  1. 吴恩达老师深度学习视频课笔记:目标检测
  2. 海思3536:PC客户端编译过程报错及解决方法
  3. python密码测试代码_python使用正则表达式检测密码强度源码分享
  4. Mysql常用词汇_mysql 数据库常用单词
  5. 【基础知识】win10常用快捷键
  6. tomcat监控-psi-probe使用
  7. java中的分页 效率考虑_面试官:数据量很大,分页查询很慢,有什么优化方案?...
  8. qt 多个模型如何显示在表格中_Qt MOOC系列教程 第五章第四节:QML中的C++模型
  9. 微信小程序 实现复制到剪贴版功能
  10. iOS ERROR ITMS - 打包上传报错整理