java Concurrent并发容器类 小结
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并发容器类 小结的更多相关文章
- [Java Concurrent] 并发访问共享资源的简单案例
EvenGenerator 是一个偶数生成器,每调用一个 next() 就会加 2 并返回叠加后结果.在本案例中,充当被共享的资源. EvenChecker 实现了 Runnable 接口,可以启动新 ...
- java concurrent 并发多线程
Concurrent 包结构 ■ Concurrent 包整体类图 ■ Concurrent包实现机制 综述: 在整个并发包设计上,Doug Lea大师采用了3.1 Concurrent包整体架构的三 ...
- 《java并发编程实战》读书笔记4--基础构建模块,java中的同步容器类&并发容器类&同步工具类,消费者模式
上一章说道委托是创建线程安全类的一个最有效策略,只需让现有的线程安全的类管理所有的状态即可.那么这章便说的是怎么利用java平台类库的并发基础构建模块呢? 5.1 同步容器类 包括Vector和Has ...
- 深透清晰理解Java高并发概述
1.多线程安全性 多线程安全性的定义可能众说纷纭,但是其最核心的一点就是正确性,也就是程序的行为结果和预期一致. 当多个线程访问某个类时,不管运行环境采用何种线程调度算法或者这些线程如何交替执行,且不 ...
- Java多线程并发05——那么多的锁你都了解了吗
在多线程或高并发情境中,经常会为了保证数据一致性,而引入锁机制,本文将为各位带来有关锁的基本概念讲解.关注我的公众号「Java面典」了解更多 Java 相关知识点. 根据锁的各种特性,可将锁分为以下几 ...
- Java:并发笔记-09
Java:并发笔记-09 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 7. 共享模型之工具-2 原理:AQS 原理 对于 AQS 的原理这部分内容,没很好的 ...
- Java:并发笔记-04
Java:并发笔记-04 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 本章内容-3 线程状态转换 活跃性 Lock 3.10 重新理解线程状态转换 假设有线 ...
- Java:并发笔记-01
Java:并发笔记-01 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 1. 进程与线程 本章内容 进程和线程的概念 并行和并发的概念 线程基本应用 1.1 ...
- Java多线程-并发容器
Java多线程-并发容器 在Java1.5之后,通过几个并发容器类来改进同步容器类,同步容器类是通过将容器的状态串行访问,从而实现它们的线程安全的,这样做会消弱了并发性,当多个线程并发的竞争容器锁的时 ...
随机推荐
- TypeScript——初步认识
JavaScript的痛点 众所周知,前端开发“三剑客”分别是HTML.CSS以及JS,其中JS由于其灵活简单等特点获得了大家的青睐,但是成也萧何败萧何,由于JS设计初衷是浏览器的嵌入式脚本语言,作为 ...
- Cookies 和session
一 会话跟踪 在一个会话的多个请求中共享数据,这就是会话跟踪技术 请求登录(请求参数是用户名和密码): 请求转账(请求参数与转账相关的数据): 请求信誉卡还款(请求参数与还款相关的数据). 登录信息在 ...
- MyExceptionFilter 异常注入
public class MyExceptionFilter : IExceptionFilter { private ILogService logService; public MyExcepti ...
- Python dict和set的实现原理
在python的dict中间进行查找某个key操作时,查找所需时间不会随着dict中键值对数量增多而变长,(时间复杂度为O(1))但是list中就会(时间复杂度为O(N)),这是因为list查询实现的 ...
- pyspider爬虫框架webui简介-爬取阿里招聘信息
命令行输入pyspider开启pyspider 浏览器打开http://localhost:5000/ group表示组名,几个项目可以同一个组名,方便管理,当组名修改为delete时,项目会在一天后 ...
- 【学习总结】Git学习-GIT工作流-千峰教育(来自B站)
Git工作流指南 - av32575602 文档资料 目录: 1-什么是版本控制系统 2-工作流简介 3-集中式工作流 4-功能分支工作流 5-GitFlow工作流 小记: 初看差点放弃了,不过后面还 ...
- Unit 4.css的导入方式和选择器
一.什么是css CSS是指层叠样式表(Cascading Style Sheets),样式定义如何显示HTML元素,样式通常又会存在于样式表中.也就是说把HTML元素的样式都统一收集起来写在一个地方 ...
- Python进阶4---Python的文件IO
文件操作 体存储单元,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE).只不过因为RAM是其中最重要的存储器. 通常所说的内存即指电脑系统中的RAM.RAM要求每时每刻都不 ...
- nginx(三)反向代理和负载均衡
nginx(三)反向代理和负载均衡 正向代理概念:比如在学校要上网,在学校内网是一个内网ip,需要连上公网就需要一个正向代理服务器. 反向代理概念: 看下图(Nginx只做请求的转发,后台有多个htt ...
- Android NDK(C++) 双进程守护
双进程守护如果从进程管理器观察会发现新浪微博.支付宝和QQ等都有两个以上相关进程,其中一个就是守护进程,由此可以猜到这些商业级的软件都采用了双进程守护的办法. 什么是双进程守护呢?顾名思义就是两个进程 ...