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并发数据结构的更多相关文章

  1. Java 进阶7 并行优化 JDK多任务执行框架技术

    Java 进阶7 并行优化 JDK多任务执行框架技术 20131114          Java 语言本身就是支持多线程机制的,他提供了 Thread 类 Runnable 接口等简单的多线程支持工 ...

  2. 项目四:Java秒杀系统方案优化-高性能高并发实战

    技术栈 前端:Thymeleaf.Bootstrap.JQuery 后端:SpringBoot.JSR303.MyBatis 中间件:RabbitMQ.Redis.Druid 功能模块 分布式会话,商 ...

  3. Java秒杀系统方案优化 高性能高并发实战(1)

    首先先把 springboot +thymeleaf 搞起来 ,参考 springboot 官方文档 本次学习 使用 springboot + thymeleaf+mybatis+redis+Rabb ...

  4. Java秒杀系统方案优化 高性能高并发实战(已完成)

    1:商品列表 2:商品详情判断是否可以开始秒杀,未开始不显示秒杀按钮显示倒计时,开始显示秒杀按钮,同时会显示验证码输入框以及验证码图片,当点击秒杀按钮的时候会首先判断验证码是否正确,如果正确会返回一个 ...

  5. Java 进阶7 并发优化 5 并发控制板方法

    Java 进阶7 并发优化 5 并发控制板方法 20131114 前言:          Java 中多线程并发程序中存在线程安全的问题,之前学习 Java的同步机制,掌握的同步方法只有一种就是使用 ...

  6. Java进阶7 并发优化2 并行程序设计模式

    Java进阶7 并发优化2 并行程序设计模式20131114 1.Master-worker模式 前面讲解了Future模式,并且使用了简单的FutureTask来实现并发中的Future模式.下面介 ...

  7. Java高并发秒杀API之高并发优化

    ---恢复内容开始--- 第1章 秒杀系统高并发优化分析   1.为什么要单独获得系统时间 访问cdn这些静态资源不用请求系统服务器 而CDN上没有系统时间,需要单独获取,获取系统时间不用优化,只是n ...

  8. Java进阶知识点:并发容器背后的设计理念

    一.背景 容器是Java编程中使用频率很高的组件,但Java默认提供的基本容器(ArrayList,HashMap等)均不是线程安全的.当容器和多线程并发编程相遇时,程序员又该何去何从呢? 通常有两种 ...

  9. Java进阶知识点:服务端高并发的基石 - NIO与Reactor AIO与Proactor

    一.背景 要提升服务器的并发处理能力,通常有两大方向的思路. 1.系统架构层面.比如负载均衡.多级缓存.单元化部署等等. 2.单节点优化层面.比如修复代码级别的性能Bug.JVM参数调优.IO优化等等 ...

随机推荐

  1. MongoDB操作库/表

    假设你已经安装好了MongoDB 不使用权限启动 mongod --fork --bind_ip 0.0.0.0 --dbpath=/mydata/mongo/data --logpath=/myda ...

  2. rmp-st算法

    struct RMQ { ]; void init(int n) { ; i <= n; i ++)log2[i] = (i == ? - : log2[i >> ] + ); ; ...

  3. 2017 Multi-University Training Contest - Team 3 Kanade's sum hd6058

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6058 题目: Kanade's sum Time Limit: 4000/2000 MS (J ...

  4. quartz (一) 基于 Quartz 开发企业级任务调度应用

    本文转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-quartz/ Quartz 基本概念及原理 Quartz Scheduler 开 ...

  5. 在DLL编程中,导出函数为什么需要extern "C"

    转自:http://blog.csdn.net/zhongjling/article/details/8088664 一般来讲,在DLL编程过程中,对于导出的函数前 都需要加入 extern “C”, ...

  6. PHP递归算法

    /** * 获取菜单 * @param number $id * @return multitype: */ public function menu($id = 0) { $menu = M ( ' ...

  7. Sublime text3:安装插件SublimeREPL解决不支持input

    Sublime text3:安装插件SublimeREPL解决不支持input 安装SublimeREPL 1,调用ctrl+shift+p 输入install回车: 2,输出:sublimerepl ...

  8. mysql-connector-java小笔记

    Java 连接MySQL需要驱动包,否则JDBC无法访问数据库(无法注册驱动),常用的是mysql-connector-java,在idea中新建项目时可以在选择依赖时勾选Mysql,这样就会自动加载 ...

  9. 20145303 《Java程序设计》第7周学习总结

    20145303 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量 格林威治标准时间(GMT),现已不作为标准时间使用,即使标注为GMT(格林威治时间),实际上谈到的的是U ...

  10. 20145231熊梓宏 《网络对抗》 实验8 Web基础

    20145231熊梓宏 <网络对抗> 实验8 Web基础 基础问题回答 ●什么是表单? 表单是一个包含表单元素的区域,表单元素是允许用户在表单中输入信息的元素,表单在网页中主要负责数据采集 ...