Java进阶7并发优化4——JDK并发数据结构
Java进阶7并发优化4——JDK并发数据结构20131114
由于并发程序和串行程序的不同特点,在串行程序中使用的数据结构可能无法在并行程序中直接的正常使用,因为这些数据结构可能不是线程安全的,所以这一次并发程序的优化介绍的是并发程序中的数据结构,比如并发List,并发Set,并发Map等。
1.并发List
Vector实现的List接口,CopyOnWriteArrayList也是实现的List接口,这两个List的实现是线程安全的,但是对于ArrayList不是线程安全的,所以在多线程中尽量避免使用ArrayList,如果因为某些原因必须使用的话,需呀使用同步机制:
Collection.synchronizedList(List list)对List进行封装,封装成为线程安全的List。
CopyOnWriteArrayList:实现的机制与Vector的机制是不同的,当对对象进行写操作的时候,复制该对象;如果是进行读操作的话,那么就直接返回结果,不需要同步;核心思想就是减少所得竞争,从而提高程序的性能,但是这个数据结构在一定程度上牺牲了写的性能。
Vector的实现使用的是同步机制,get所有的操作必须是首先获得对象的锁才可以进行,在高并发的情况支架,锁机制会拖累系统性能。
Vector适合写操作,CopyOnWriteArrrayList适合的是读操作并发程序
2.并发Set
类似List,Set 也有一个CopyOnWriteArraySet,而且是线程安全的,内部实现完全依赖于CopyOnWriteArrayList,适合使用在读操作多的并发场景,当然也可以使用的是
Collections中的静态方法将数据结构转换成为线程安全的。
public static <T> Set<T> synchronizedSet(Set<T> s);
3.并发Map
同样可以使用Collectionsz中的synchornizedMap()方法转换,但是性能比较差,JDK中提供了一个比较高效的Map数据结构:ConcurrrentHashMap.他的get是无锁的,他的put的锁粒度是比较小的,所以效率会比较高。
4.并发Queue
JDK中有两种代表性的实现:ConcurrentLinkedQueue为代表的高性能队列和BlockingQueue为接口的阻塞队列,都是集成Queue接口。
ConcurrentLinkedQueue适合的是高并发场景的队列,通过无锁的方式实现的,而且性能是高于BlockingQueue。
5.并发Deque
在JDK中实现了双端队列,可以在头部和尾部实现出队和入队,他有三个实现类:LinkedList,ArrayDeque, LinkedBlockingDeque。它们都实现了双端队列的接口 Deque。ArrayDeque是基于Array实现的,拥有高效的随机访问性质,但是当队列变大的时候,就需要重新分配内存空间,并且才需要复制数值;所以LinkedList会表现出更好的性能。以上两者都不是线程安全的。
需要使用LinkedBlockingDeque,这是一个线程安全的Deque的实现,他没有实现读写锁的分离,所以高并发系统中性能是地狱LinkedBlockingQueue的。
Tengfei Yang
In Sun Yat-sen University 2013.11.14
Java进阶7并发优化4——JDK并发数据结构的更多相关文章
- Java 进阶7 并行优化 JDK多任务执行框架技术
Java 进阶7 并行优化 JDK多任务执行框架技术 20131114 Java 语言本身就是支持多线程机制的,他提供了 Thread 类 Runnable 接口等简单的多线程支持工 ...
- 项目四:Java秒杀系统方案优化-高性能高并发实战
技术栈 前端:Thymeleaf.Bootstrap.JQuery 后端:SpringBoot.JSR303.MyBatis 中间件:RabbitMQ.Redis.Druid 功能模块 分布式会话,商 ...
- Java秒杀系统方案优化 高性能高并发实战(1)
首先先把 springboot +thymeleaf 搞起来 ,参考 springboot 官方文档 本次学习 使用 springboot + thymeleaf+mybatis+redis+Rabb ...
- Java秒杀系统方案优化 高性能高并发实战(已完成)
1:商品列表 2:商品详情判断是否可以开始秒杀,未开始不显示秒杀按钮显示倒计时,开始显示秒杀按钮,同时会显示验证码输入框以及验证码图片,当点击秒杀按钮的时候会首先判断验证码是否正确,如果正确会返回一个 ...
- Java 进阶7 并发优化 5 并发控制板方法
Java 进阶7 并发优化 5 并发控制板方法 20131114 前言: Java 中多线程并发程序中存在线程安全的问题,之前学习 Java的同步机制,掌握的同步方法只有一种就是使用 ...
- Java进阶7 并发优化2 并行程序设计模式
Java进阶7 并发优化2 并行程序设计模式20131114 1.Master-worker模式 前面讲解了Future模式,并且使用了简单的FutureTask来实现并发中的Future模式.下面介 ...
- Java高并发秒杀API之高并发优化
---恢复内容开始--- 第1章 秒杀系统高并发优化分析 1.为什么要单独获得系统时间 访问cdn这些静态资源不用请求系统服务器 而CDN上没有系统时间,需要单独获取,获取系统时间不用优化,只是n ...
- Java进阶知识点:并发容器背后的设计理念
一.背景 容器是Java编程中使用频率很高的组件,但Java默认提供的基本容器(ArrayList,HashMap等)均不是线程安全的.当容器和多线程并发编程相遇时,程序员又该何去何从呢? 通常有两种 ...
- Java进阶知识点:服务端高并发的基石 - NIO与Reactor AIO与Proactor
一.背景 要提升服务器的并发处理能力,通常有两大方向的思路. 1.系统架构层面.比如负载均衡.多级缓存.单元化部署等等. 2.单节点优化层面.比如修复代码级别的性能Bug.JVM参数调优.IO优化等等 ...
随机推荐
- 一只代码小白git托管路上的二三事
[经验]一只代码小白git托管路上的二三事 写在前面的话 寒假的时候,娄老师给我们布置了代码托管的作业,并要求把托管地址发给学委.因假期的时候没有带电脑回家,所以只是在手机上草草注册了,也稀里糊涂就将 ...
- PHP SQL写法 积累(注:PHPSQL与LINQ SQL相似)
1: $data ['parentid'] = $pid; M('menu')->where($data)->order(' id asc ')-> select(); // ...
- Webpack -- 基础篇
篇仅演示 webpack 的基础搭建,为入门和走通基本流程而写.仅 window 系统. 1. 安装一些东西 安装 nodeJS,下载链接.然后检查安装是否完成. 系统“开始”和“R”键同时按住,桌面 ...
- Python面试题之Python反射机制
0x00 前言 def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') def f4(): print('f4') a = ...
- Python3.x:如何识别图片上的文字
Python3.x:如何识别图片上的文字 安装pytesseract库,必须先安装其依赖的PIL及tesseract-ocr,其中PIL为图像处理库,而后面的tesseract-ocr则为google ...
- tomcat和apache的区别
1. Apache是web服务器,Tomcat是应用(java)服务器(也可作web服务器),它只是一个servlet容器,是Apache的扩展. 2. Apache和Tomcat都可以做为独立的we ...
- 八皇后问题解题报告(dfs
这里是代码传送门 所谓八皇后问题,一开始接触,上学期舍友提及的,但是因为各种原因,水平不够,并没有关心,偶然之间,再次遇见,便进行的尝试(棋盘是0-7的,不是1-8的...开始打弄错了) 所谓八皇后问 ...
- 临时变量不能作为非const引用
转自:http://blog.csdn.net/u011068702/article/details/64443949 1.看代码 2.编译结果 3.分析和解决 就拿f(a + b)来说,a+b的值会 ...
- CentOS7安装GNOME可视化界面
1.首先安装X(X Window System),命令为 yum groupinstall "X Window System" 回车(注意有引号) 1CentOS Linux系 ...
- 入手sm961
测速: 发现这个测速软件不同版本测试还不一样 下面是我的intel750的,用最新版本测试软件测的 淘宝买了一个散热片