在多线程的开发中经常会碰到数据的并发修改,并发存取,因此正确的使用不同的容器很关键,直接影响到数据的正确性。下面主要记录下三种重要的队列,以及一种非常使用的 双端队列 。
1、同步容器
主要代表有Vector和Hashtable,以及Collections.synchronizedXxx等。
锁的粒度为当前对象整体。
迭代器是及时失败的,即在迭代的过程中发现被修改,就会抛出ConcurrentModificationException。
2、并发容器
主要代表有ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentSkipListMap、ConcurrentSkipListSet
锁的粒度是分散的、细粒度的,即读和写是使用不同的锁。
迭代器具有弱一致性,即可以容忍并发修改,不会抛出ConcurrentModificationException。
3、阻塞队列
主要代表有LinkedBlockingQueue、ArrayBlockingQueue、PriorityBlockingQueue(Comparable,Comparator)、SynchronousQueue。
提供了可阻塞的put和take方法,以及支持定时的offer和poll方法。
适用于生产者、消费者模式(线程池和工作队列-Executor)
同时也是同步容器
4、双端队列和工作密取
主要代表有ArrayDeque和LinkedBlockingDeque。
意义:正如阻塞队列适用于生产者消费者模式,双端队列同样适用与另一种模式,即工作密取。在生产者-消费者设计中,所有消费者共享一个工作队列, 而在工作密取中,每个消费者都有各自的双端队列。
如果一个消费者完成了自己双端队列中的全部工作,那么他就可以从其他消费者的双端队列末尾秘密的获取工作。具有更好的可伸缩性,这是因为工作者线程不会在单个共享的任务队列上发生竞争 。
在大多数时候,他们都只是访问自己的双端队列,从而极大的减少了竞争。当工作者线程需要访问另一个队列时,它会从队列的尾部而不是头部获取工作,因此进一步降低了队列上的竞争。
适用于:网页爬虫等任务中
1、同步容器
主要代表有Vector和Hashtable,以及Collections.synchronizedXxx等。
锁的粒度为当前对象整体。
迭代器是及时失败的,即在迭代的过程中发现被修改,就会抛出ConcurrentModificationException。
2、并发容器
主要代表有ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentSkipListMap、ConcurrentSkipListSet
锁的粒度是分散的、细粒度的,即读和写是使用不同的锁。
迭代器具有弱一致性,即可以容忍并发修改,不会抛出ConcurrentModificationException。
3、阻塞队列
主要代表有LinkedBlockingQueue、ArrayBlockingQueue、PriorityBlockingQueue(Comparable,Comparator)、SynchronousQueue。
提供了可阻塞的put和take方法,以及支持定时的offer和poll方法。
适用于生产者、消费者模式(线程池和工作队列-Executor)
同时也是同步容器
4、双端队列和工作密取
主要代表有ArrayDeque和LinkedBlockingDeque。
意义:正如阻塞队列适用于生产者消费者模式,双端队列同样适用与另一种模式,即工作密取。在生产者-消费者设计中,所有消费者共享一个工作队列, 而在工作密取中,每个消费者都有各自的双端队列。
如果一个消费者完成了自己双端队列中的全部工作,那么他就可以从其他消费者的双端队列末尾秘密的获取工作。具有更好的可伸缩性,这是因为工作者线程不会在单个共享的任务队列上发生竞争 。
在大多数时候,他们都只是访问自己的双端队列,从而极大的减少了竞争。当工作者线程需要访问另一个队列时,它会从队列的尾部而不是头部获取工作,因此进一步降低了队列上的竞争。
适用于:网页爬虫等任务中
发表评论
-
java中线程池
2016-06-26 16:31 364最近在看线程池的类容,自己动手实现一个 package ... -
jvm常用设置
2015-09-08 22:48 382在我们实际工作中,可能会经常对JVM有一些设置,但是很多设置都 ... -
WebService相关
2015-07-26 21:55 969之前由于工作需要 ... -
java RMI
2015-07-23 23:04 441JAVA RMI相关 分布 ... -
java jdbc 连接池
2015-07-21 00:18 480经常使用hibernate,在使用hibernate的时候经常 ... -
java 流传输压缩包
2015-07-14 23:14 577有的时候,页面上的下载文件是从后台使用流的形式下载来的,而不是 ... -
java 网络传输文件
2015-06-01 21:14 433package sterning; import java. ... -
java MD5加密
2015-03-30 14:41 297MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性 ... -
java设计模式 之 builder模式
2014-12-11 22:19 413最近在看java设计模式,看到builder模式感觉十分不错, ... -
网上见到一篇compareTo文章较好,收藏之
2014-12-04 21:04 5421、compareTo(Object o)方法是jav ... -
Hibernate 和 spring 整合使用
2014-10-14 21:28 751在hibernate和spring时总结的一些知识,以供将来查 ... -
hiernate 集中管理session
2014-10-13 21:55 482问题: 使用hibern ... -
java写入txt文件
2014-05-22 23:10 1092File file = new File("d: ... -
POI读取excel
2014-05-22 23:05 899读取excel大概在java中有两种方法,选用apache的P ... -
定时器 quartz 和 spring
2014-04-17 23:30 480最近学习了一个quartz 和spring 的定时调度 这个 ... -
java 基于Struts2的 文件上传和下载
2014-04-03 22:56 531文件上传: 页面代码: <form action=' ... -
java IO
2014-03-23 23:23 410import java.io.BufferedReader ... -
自己写的一个JDBC工具类
2014-03-11 20:00 1167在最近的一段时间写毕业设计,由于本科阶段的毕业设计不是特别大的 ... -
java汉字数字转换成阿拉伯数字
2014-02-20 17:14 6554今天做一个日期转换的时候发现有些时间是用大写汉字写成的,需 ...
相关推荐
主要为大家详细介绍了java并发容器CopyOnWriteArrayList实现原理及源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
JAVA并发容器代码随读1
并发容器的原理,7大并发容器详解、及使用场景。有兴趣的可以看下。
不考虑多线程并发的情况下,容器类一般使用ArrayList、HashMap等线程不...上面提到的线程安全容器都在java.util.concurrent包下,这个包下并发容器不少,今天全部翻出来鼓捣一下。 仅做简单介绍,后续再分别深入探索。
ConcurrentHashMapConcurrentHashMap底层具体实现JDK1.7底层实现将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据时,其他段的数据也能被其他线程访问。...
Java——并发容器之ConcurrentHashMap;Java——并发容器之ConcurrentHashMap;Java——并发容器之ConcurrentHashMap;Java——并发容器之ConcurrentHashMap;Java——并发容器之ConcurrentHashMap;Java——并发...
下面小编就为大家带来一篇基于Java并发容器ConcurrentHashMap#put方法解析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
《Java并发编程的艺术》内容涵盖Java并发编程机制的底层实现原理、Java内存模型、Java并发编程基础、Java中的锁、并发容器和框架、原子类、并发工具类、线程池、Executor框架等主题,每个主题都做了深入的讲解,同时...
5.2 并发容器 5.2.1 ConcurrentHashMap 5.2.2 额外的原子Map操作 5.2.3 CopyOnWriteArrayList 5.3 阻塞队列和生产者-消费者模式 5.3.1 示例:桌面搜索 5.3.2 串行线程封闭 5.3.3 双端队列与工作密取 5.4 ...
java并发编程总结,为xmind格式,总结的很详细,包含常见的并发容器,锁等知识
Java并发编程Xmind思维导图,思路更清晰。内容来自《Java并发编程的艺术》,包括并发机制底层原理、Java内存模型、Java并发编程基础、锁机制、线程池、并发工具类、原子操作类、并发容器和框架。纯手打,非诚勿扰。
第6章介绍了Java中的大部分并发容器,并深入剖析其实现原理,让读者领略大师的设计技巧。 第7章介绍了Java中的原子操作类,并给出一些实例。 第8章介绍了Java中提供的并发工具类,这是并发编程中的瑞士军刀。 第9章...
Java 常见并发容器总结 JDK 提供的这些容器大部分在 `java.util.concurrent` 包中。 - **`ConcurrentHashMap`** : 线程安全的 `HashMap` - **`CopyOnWriteArrayList`** : 线程安全的 `List`,在读多写少的场合性能...
, 《Java并发编程的艺术》内容涵盖Java并发编程机制的底层实现原理、Java内存模型、Java并发编程基础、Java中的锁、并发容器和框架、原子类、并发工具类、线程池、Executor框架等主题,每个主题都做了深入的讲解,...
java并发学习总结 例子:包含(并发容器、同步容器、同步工具、死锁、异常、中断、线程池、返回结果、同步方法等代码例子)
我们挑选出⼀些⽐较有代表性的并发容器 1 类,来感受⼀下JDK⾃带的并发集合带来的“快感”。 ConcurrentLinkedQueue是⼀个基于链接节点的⽆界线程安全队列,它采⽤先进先出的规则对节点 进⾏排序,当我们添加⼀个...
Java并发编程与高并发解决方案之并发容器(J.U.C).docx
第48节并发容器ConcurrentLinkedQueue原理与使用00:31:03分钟 | 第49节Java中的阻塞队列原理与使用00:26:18分钟 | 第50节实战:简单实现消息队列00:11:07分钟 | 第51节并发容器ConcurrentHashMap原理与使用00:38:...