LinkedBlockingQueue和ConcurrentLinkedQueue详细用法
1.LinkedBlockingQueue<E>:java.util.concurrent
API中的解释:
- public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable
一个基于已链接节点的、范围任意的 blocking queue。此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多 数并发应用程序中,其可预知的性能要低。可选的容量范围构造方法参数作为防止队列过度扩展的一种方法。如果未指定容量,则它等于 Integer.MAX_VALUE。除非插入节点会使队列超出容量,否则每次插入后会动态地创建链接节点。
适用阻塞队列的好处:多线程操作共同的队列时不需要额外的同步,另外就是队列会自动平衡负载,即那边(生产与消费两边)处理快了就会被阻塞掉,从而减少两边的处理速度差距。
2.ConcurrentLinkedQueue<E>:java.util.concurrent
API中的解释:
- public class ConcurrentLinkedQueue<E>extends AbstractQueue<E>implements Queue<E>, Serializable
一个基于链接节点的、无界的、线程安全的队列。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部 是队列中时间最长的元素。队列的尾部 是队列中时间最短的元素。新的元素插入到队列的尾部,队列检索操作从队列头部获得元素。当许多线程共享访问一个公共 collection 时,ConcurrentLinkedQueue
是一个恰当的选择。此队列不允许 null 元素。
扩展:
并发编程中的一种编程方式是把任务拆分为一些的小任务,即Runnable,然后再提交给一个Executor执
行,Executor.execute(Runnable).Executor在执行时适用内部的线程池完成操作。Executor在执行时使用内部的线
程池完成操作。
创建线程池:
Executor executor = Executors.newFixedThreadPool(10); //创建固定数目线程的线程池
Executor executor = Executors.newCachedThreadPool(); //创建一个可缓存的线程池,调用execute将重用以前构造的线程(如线程可用)。如果现有线程没有可用的。则创建一个新的线程并添加到池中。
ExecutorService与生命周期
ExecutorService扩展了Executor并添加了一些生命周期管理的方法。一个
Executor的生命周期有三种状态,运行,关闭,终止。Executor创建时出于运行状态。当调用
ExecutorService.shutdown()后,出于关闭状态,isShutdown方法返回true。这时,不应该再想Executor中添
加任务,所有已添加的任务执行完毕后,Executor出于终止状态,IsTerminated()返回true.如果Executor处于关闭状态,往
Executor提交任务会抛出unchecked
exception RejectedExecutionException.
API中的解释:
- public interface ExecutorService extends Executor
Executor 提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成
Future 的方法。 可以关闭 ExecutorService,这将导致其停止接受新任务。关闭后,执行程序将最后终止,这时没有任务在执行,也没有任务在等待执行,并且无法提交新任务。通过创建并返回一个可用于取消执行和/或等待完成的
Future,方法 submit 扩展了基本方法 Executor.execute(java.lang.Runnable)。方法 invokeAny 和
invokeAll 是批量执行的最常用形式,它们执行任务集合,然后等待至少一个,或全部任务完成(可使用 ExecutorCompletionService 类来编写这些方法的自定义变体)。Executors 类提供了用于此包中所提供的执行程序服务的工厂方法。
void shutdown():启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。
submit(Runnable task) 提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。
原文:http://blog.csdn.net/ac903919/article/details/6967728
LinkedBlockingQueue和ConcurrentLinkedQueue详细用法的更多相关文章
- C#播放声音的四种方法 +AxWindowsMediaPlayer的详细用法
C#播放声音的四种方法 第一种是利用DirectX 1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll和 Microsoft.Directx ...
- 在DOS下的DEBUG命令的详细用法
在DOS下的DEBUG命令的详细用法 名称 解释 格式 a (Assemble) 逐行汇编 a [address] c (Compare) 比较两内存块 c range address d (Dump ...
- __declspec关键字详细用法
__declspec关键字详细用法 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI ...
- CString.Format的详细用法(转)
CString.Format的详细用法(转) 在MFC程序中,使用CString来处理字符串是一个很不错的选择.CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串.CS ...
- IFRAM的详细用法
IFRAM的详细用法: IFRAM的详细用法: <IFRAME>用于设置文本或图形的浮动图文框或容器. BORDER <IFRAME BORDER="3"& ...
- 【转】java.util.vector中的vector的详细用法
[转]java.util.vector中的vector的详细用法 ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.uti ...
- DOM Style样式对象的详细用法
DOM Style样式对象的详细用法 HTML Style样式比较复杂,相应访问.修改方法也有所差异.参考相关资料,整理如下. 典型Html文件如下,有三种定义方式. <head> ...
- css基础之 font的简写规则 以及 自定义 CSS3 @font-face详细用法
Part 1 font简写 CSS的命名规则是用英文字母 数字 和下划线(一般用小写)来命名.简写css font的好处有三:一是写起来方便(就像键盘快捷键):二是简化代码:三是帮助你熟悉和深刻理解c ...
- Tomcat详细用法学习(三)
本篇接上一篇<Tomcat详细用法学习(二)>,主要讲解服务器所要求的web应用的组织结构. 上一篇说到了如何使用服务器将自己的web应用映射成虚拟目录,以便于在浏览器中可以对自己开发的w ...
随机推荐
- 前端开发工程师:网易web前端课程,价值1499元【无水印版】
这套网上的朋友购买分享给我的,特此分享~ 让大家都受益 早日成为强大的web前端开发工程师!!赶紧回复下载吧 下载地址:http://fu83.cn/thread-172-1-1.html
- python数字图像处理(12):基本图形的绘制
图形包括线条.圆形.椭圆形.多边形等. 在skimage包中,绘制图形用的是draw模块,不要和绘制图像搞混了. 1.画线条 函数调用格式为: skimage.draw.line(r1,c1,r2,c ...
- FPGA学习之基本结构
如何学习FPGA中提到第一步:学习.了解FPGA结构,FPGA到底是什么东西,芯片里面有什么,不要开始就拿个开发板照着别人的东西去编程.既然要开始学习FPGA,那么就应该从其基本结构开始.以下内容是我 ...
- 自己留存:mysql full text 支持中文的一个设定
innodb_ft_min_token_size=1 ft_min_word_len=1
- Lambda表达式和表达式树
在C# 2.0中,通过方法组转换和匿名方法,使委托的实现得到了极大的简化.但是,匿名方法仍然有些臃肿,而且当代码中充满了匿名方法的时候,可读性可能就会受到影响.C# 3.0中出现的Lambda表达式在 ...
- Javascript基础系列之(三)数据类型 (字符串 String)
javascript一共有9种数据类型 字符串 String 数值型 Number 布尔型 Boolean 未定义 Undefine 空值 Null 对象 Object 引用Refernce 列表型 ...
- Source Tree for MAC1.6
Atlassian ID has become the new Atlassian Account. Read more about it here. After some great communi ...
- 每天一个linux命令(18):find 命令概览
Linux 下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所 以它的选项也很多,其中大部分选项都值得我们 ...
- ADHelper C#域用户操作(转)
using System; using System.Collections.Generic; using System.DirectoryServices; using System.Linq; u ...
- iOS边练边学--iOS中的XML数据解析
XML的解析方式 SAX 大小文件都可以 NSXMLParser DOM 最好是小文件 GDataXML NSXMLParser的用法 创建解析器来解析 // 创建XML解析器 NSXMLParser ...