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

为什么java.util.concurrent 包里没有并发的ArrayList实现?

问:JDK 5在java.util.concurrent里引入了ConcurrentHashMap,在需要支持高并发的场景,我们可以使用它代替HashMap。但是为什么没有ArrayList的并发实现呢?难道在多线程场景下我们只有Vector这一种线程安全的数组实现可以选择么?为什么在java.util.concurrent 没有一个类可以代替Vector呢?

答:我认为在java.util.concurrent包中没有加入并发的ArrayList实现的主要原因是:很难去开发一个通用并且没有并发瓶颈的线程安全的List。

像ConcurrentHashMap这样的类的真正价值(The real point / value of classes)并不是它们保证了线程安全。而在于它们在保证线程安全的同时不存在并发瓶颈。举个例子,ConcurrentHashMap采用了锁分段技术和弱一致性的Map迭代器去规避并发瓶颈。

所以问题在于,像“Array List”这样的数据结构,你不知道如何去规避并发的瓶颈。拿contains() 这样一个操作来说,当你进行搜索的时候如何避免锁住整个list?

另一方面,Queue 和Deque (基于Linked List)有并发的实现是因为他们的接口相比List的接口有更多的限制,这些限制使得实现并发成为可能。

CopyOnWriteArrayList是一个有趣的例子,它规避了只读操作(如get/contains)并发的瓶颈,但是它为了做到这点,在修改操作中做了很多工作和修改可见性规则。 此外,修改操作还会锁住整个List,因此这也是一个并发瓶颈。所以从理论上来说,CopyOnWriteArrayList并不算是一个通用的并发List。

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 为什么java.util.concurrent 包里没有并发的ArrayList实现?

转载于:https://my.oschina.net/u/914290/blog/808360

【ArrayList】为什么java.util.concurrent 包里没有并发的ArrayList实现?相关推荐

  1. java.util.concurrent包API学习笔记

    newFixedThreadPool 创建一个固定大小的线程池. shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭. awaitTermination():用于等待子线程结束, ...

  2. 高并发编程基础(java.util.concurrent包常见类基础)

    JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法 ...

  3. java.util.concurrent包

    本文是我们学院课程中名为Java Concurrency Essentials的一部分 . 在本课程中,您将深入探讨并发的魔力. 将向您介绍并发和并发代码的基础知识,并学习诸如原子性,同步和线程安全之 ...

  4. java.util.concurrent 包下面的所有类

    java.util.concurrent 包下面的所有类 原子操作数类: java.util.concurrent.atomic.AtomicBoolean.class java.util.concu ...

  5. Java高并发编程学习(三)java.util.concurrent包

    简介 我们已经学习了形成Java并发程序设计基础的底层构建块,但对于实际编程来说,应该尽可能远离底层结构.使用由并发处理的专业人士实现的较高层次的结构要方便得多.要安全得多.例如,对于许多线程问题,可 ...

  6. java.util.concurrent包详细分析--转

    原文地址:http://blog.csdn.net/windsunmoon/article/details/36903901 概述 Java.util.concurrent 包含许多线程安全.测试良好 ...

  7. java concurrent 框架,java.util.concurrent 包下的 Synchronizer 框架

    看完书 java concurrency in practice 当然是想找点啥好玩的东东玩玩. 当看到了Doug Lee 的论文 << The java.util.concurrent ...

  8. jdk8中java.util.concurrent包分析

    并发框架分类 1. Executor相关类 Interfaces. Executor is a simple standardized interface for defining custom th ...

  9. Java 并发 —— Java 标准库对并发的支持及 java.util.concurrent 包

    0. Collections.synchronizedXxx() Java 中常用的集合框架中的实现类:HashSet/TreeSet.ArrayList/LinkedList.HashMap/Tre ...

最新文章

  1. MSRA的Transformer跨界超越CNN,还解决了计算复杂度难题
  2. 安装sql2008 enterprise (English正式版)图解
  3. 5GS 协议栈 — PFCP 协议 — MAR 多接入规则
  4. python之禅中文-Python之禅与翻译之美
  5. DeepMind:所谓SACX学习范式
  6. python并发编程2-进程
  7. 填涂颜色(洛谷-P1162)
  8. Android 功耗(20)---Android后台调度与省电
  9. WCF后传系列(2):深入WCF寻址Part 2—自定义寻址报头
  10. 51Nod 1509加长棒
  11. axure数据报表元件库_axure图表元件库 axure自制的组件库(包括数据组件)
  12. 从理论到工程实践——用户画像入门宝典
  13. 【算法】小团的车辆调度(美团2021校招题)
  14. 混合开发Ionic+angular快速开发App
  15. c编译动态库和静态库流程
  16. AC2100 OpenWrt 多拨
  17. You-get视频下载工具
  18. 基于AndroidStudio员工绩效考核评价系统app设计
  19. 汉家江湖无名幻境服务器找不到,汉家江湖无名幻境怎么打开_汉家江湖无名幻境开启方式攻略_玩游戏网...
  20. android 解锁mac,论一台笔记本三个不同系统的玩法,解锁正确姿势

热门文章

  1. sql_trace的介绍
  2. HTTP响应头不缓存
  3. TCP编程函数和步骤
  4. jquery技巧总结
  5. 用Asp.net 传送大文件
  6. 非对称加密算法RSA公钥私钥的模数和指数提取方法
  7. C++中局部类的使用
  8. 深度学习开源库tiny-dnn的使用(MNIST)
  9. 【FFmpeg】打印日志函数分析(可以根据不同级别打印不同颜色的日志)
  10. 【GStreamer】gstreamer工具详解之:gst-discoverer-1.0