8.1并发集合(Concurrent Collections)
Java并发框架在包java.util.package中提供了接口和类。接口中包含List、Set和Map;类包含了ArrayList、TreeSet和HashMap。
- ArrayList、TreeSet、HashMap和其它的类都继承了这些类接口,但是它们是不安全的线程。然而,你可以让它们在使用是安全的线程,通过使用java.util.Collection类的同步擦除方法。例如,你可以通过使用Arraylist去实例化Collections.synchronizedList()去包含一个安全线程的变量ArrayList。
- 尽管它们在多线程的环境中需要简单的代码,但它们在安全集合中也存在以下问题:
- 在遍历集合之前,它可能需要请求一个锁,因为它在遍历期间可能被其它线程修改。如果锁不能被请求和遍历时被修改,它更有可能抛出java.util.ConcurrentModificationException。这个导致的因为是因为集合框架(Collections Framework)类会返回快速失败的迭代器。在遍历期间集合中的参数被修改,那么迭代器将会抛出ConcurrentModificationException.快速失败的迭代器对于当前应用会带来不便。
- 在应用中可能会遭受同步集合在多线程中频繁地被调用。这种性能问题最终会影响程序的扩展性应用。
- 并发工具通过包含同步集合来解决这些问题,这些并发应用和高可扩展和集合导向型,是储存在java.util.concurret的包。这个集合导向的类会返回弱一致性的迭代器。这个迭代器包含下面的属性:
- 一个元素开始后,但尚未返回通过迭代器的next()方法不会返回。
- 一个元素添加后可能会或可能不会返回。
- 在迭代过程中,无论在迭代期间对集合进行更改,任何元素都不会多次返回。
- 下面列表中提供了面向并发集合的简单例子,你可以在包java.util.concurrent中找到。
- BlockingQueue是java.util.Queue的子接口,在检索元素之前没有足够的空间,那么将会处于等待的阻塞状态;或者在储存一个元素时,等待空间变得可用。每一个ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockingQueue和SynchronousQueue的类应用都是直接继承的。LinkedBlockDeque和LinkedTransferQueue的类应用接口通过BlockingQueue的子接口使用。
- ConcurrentMap是java.util.Map的子接口,在这个接口中声明putIfAbsent()、remove()和replace的方法。ConcurrentHashMap类(与同步java.util.HashMap相似)、ConcurrentSkipListMap类和ConcurrentNavigableMap类应用这个接口。
8.1并发集合(Concurrent Collections)相关推荐
- C#多线程开发-使用并发集合
前言 大家好,我是阿辉. 在C#语言中当需要处理并发的场景时,就需要程序员使用最合理的数据结构.那么哪些数据结构是支持和可以在并行计算中被使用的呢. 首先这些数据结构具备可伸缩性,尽可能地避免锁(会造 ...
- 多线程编程学习笔记——使用并发集合(三)
接上文 多线程编程学习笔记--使用并发集合(一) 接上文 多线程编程学习笔记--使用并发集合(二) 四. 使用ConcurrentBag创建一个可扩展的爬虫 本示例在多个独立的即可生产任务又可消费 ...
- Rx:4-[编外篇] .NET4里的Concurrent Collections
Rx可以在3.5里用,他带给了3.5可以使用的支持并发的集合类型,说白了,就是提供了Thread-Safe的Collection. 在.NET 4.0之前,是不直接支持线程安全的集合的.除非自己去做l ...
- C#并行编程-并发集合
菜鸟学习并行编程,参考<C#并行编程高级教程.PDF>,如有错误,欢迎指正. 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 ...
- 驯服 Tiger: 并发集合
2004 年 6 月 16 日 Doug Lea 最初编写的 util.concurrent 包变成了 JSR-166 ,然后又变成了 J2SE 平台的 Tiger 版本.这个新库提供的是并发程序中通 ...
- java 多线程 同步 观察者 并发集合的一个例子
//第一版 package com.hra.riskprice;import com.hra.riskprice.SysEnum.Factor_Type; import org.springframe ...
- java并发集合有哪些_java中常见并发集合有哪些?详细解析
关于java中有关集合的知识点,相信大家还是有所了解的.集合中所包含的知识点是非常丰富的,而且可以细分为很多类型.今天就来为大家介绍一下并发集合的有关知识,并且用实际代码为大家展示,一起来看看吧. 首 ...
- 并发集合和普通集合以及安全集合的区别
并发集合和普通集合以及安全集合的区别 在 java 中有普通集合.同步(线程安全)的集合.并发集合.并发集合常见的有 ConcurrentHashMap.ConcurrentLinkedQueue.C ...
- java 什么是线程同步,java多线程同步集合是什么?并发集合是什么?
java中关于集合的内容也是十分丰富的,而且相关的知识点也是十分多的.多线程集合所涵盖的范围是十分广阔的.今天就来为大家介绍一下,java多线程同步集合是什么以及并发集合是什么?一起来看看吧. 首先我 ...
- 并发编程 – Concurrent 用户指南
转载自 并发编程 – Concurrent 用户指南 1. java.util.concurrent – Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.c ...
最新文章
- jquery Fancybox插件的应用
- NMM3DViewer 设计
- 你不一定知道的几个前端小知识
- 读取带空格字符串小结
- date js 半年_js Date 日期使用上的一个坑
- python设置tk退出_退出tkinter gui
- shell的算术运算
- 26留数及其应用(二)
- CentOS 6.8 编译安装MySQL5.5.32
- 学术会议/期刊论文撤稿信的模板
- 5个免费商用音频素材网站
- url指定服务器是什么意思,URL是什么意思?网页的URL是什么意思?
- 如何运行计算机学报的LaTeX模板?
- 什么是服务器?服务器是干什么用的?服务器的基本属性有哪些?怎么配置服务器?怎么挑选适合自己的服务器?
- vue2中watch的使用
- python爬虫小实例
- 一文搞懂浏览器缓存机制
- 使用 tcpcopy 线上导流及回放
- linux gpt转mbr命令,Diskpart命令将gpt格式转换成mbr教程
- 为什么OFDM抗多径?