LinkedBlockingQueue :
1、读写锁分开,性能较 ArrayListBlockingQueue 只有一把锁控制读写要高一些。
2、无界队列,不会触发Reject异常,ArrayListBlockingQueue初始化时必须指定宽度。SynchronousQueue的容量只有1。

ArrayListBlockingQueue
1、读写一把锁,在大并发的消费者和生产者场景中,性能较LinkedBlockingQueue差一些。
2、有界队列,会触发Reject异常,在增加队列和删除队列元素时,不会产生额外的数据(数组特性),GC影响比LinkedBlockingQueue更小

SynchronousQueue

1、可以理解为容量为1的阻塞队列,只有被消费了,才能接受生产者的消息。
2、当线程池的线程数已经达到了maxiumSize时,新增加时出发Reject异常
3、有公平策略和不公平策略,对应到不同进出算法 - FIFO,LIFO。

场景归类

无界的消息任务,读写频繁,使用LinkedBlockingQueue
有界的,对GC影响较小,读写不过于频繁的场景,使用ArrayListBlockingQueue
只有一个生产者和消费者,需要使用不同的公平策略的场景,使用 SynchronousQueue

LinkedBlockingQueue,ArrayListBlockingQueue,SynchronousQueue的更多相关文章

  1. java动态线程池LinkedBlockingQueue和SynchronousQueue比较

    import java.util.concurrent.Callable; public class MyCallable implements Callable<String> { pr ...

  2. SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue性能测试

    SynchronousQueue.LinkedBlockingQueue.ArrayBlockingQueue性能测试 JDK6对SynchronousQueue做了性能优化,避免对竞争资源加锁,所以 ...

  3. SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue性能测试(转)

    听说JDK6对SynchronousQueue做了性能优化,避免对竞争资源加锁,所以想试试到底平时是选择SynchronousQueue还是其他BlockingQueue. 对于容器类在并发环境下的比 ...

  4. [源码]解析 SynchronousQueue 上界,下界.. 数据保存和数据传递. 堵塞队列. 有无频繁await?

     简析SynchronousQueue.LinkedBlockingQueue(两个locker,更快),ArrayBlockingQueue(一个locker,读写都竞争)     三者都是bloc ...

  5. SynchronousQueue 的联想

    SynchronousQueue介绍 SynchronousQueue是一种阻塞队列,该队列没有任务的容量.内部实现采用了一种性能更好的无锁算法. 代码实现里的Dual Queue,其中每一个put对 ...

  6. 集合类源码(五)Collection之BlockingQueue(LinkedTransferQueue, PriorityBlockingQueue, SynchronousQueue)

    LinkedTransferQueue 功能 全名 public class LinkedTransferQueue<E> extends AbstractQueue<E> i ...

  7. jdk8中java.util.concurrent包分析

    并发框架分类 1. Executor相关类 Interfaces. Executor is a simple standardized interface for defining custom th ...

  8. Java线程:概念与原理

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  9. Java 并发工具包 java.util.concurrent 用户指南

    1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Ja ...

随机推荐

  1. POJ 1731 Orders(STL运用)

    题目地址:POJ 1731 这题能够直接用STL函数做,非常轻松..next_permutation函数非常给力.. 代码例如以下: #include <algorithm> #inclu ...

  2. ppm\pgm格式

    PGM 是便携式灰度图像格式(portable graymap file format),在黑白超声图像系统中经常使用PGM格式的图像.文件的后缀名为".pgm". PGM格式图像 ...

  3. lua学习笔记(九)

      环境  全局变量table         lua把所有的全局变量存在一个table里,并把这个table赋值给一个全局变量_G         _G也在这个全局变量的table里,它就是一个普通 ...

  4. centos7 firefox 安装flash

    在官网下载flash的tar包 https://get.adobe.com/flashplayer/?spm=a2h0j.8191423.movie_player.5~5~5~8~A 在下载tar包的 ...

  5. 事件驱动模型实例详解(Java篇)

    或许每个软件从业者都有从学习控制台应用程序到学习可视化编程的转变过程,控制台应用程序的优点在于可以方便的练习某个语言的语法和开发习惯(如.net和java),而可视化编程的学习又可以非常方便开发出各类 ...

  6. php 获取文件加的名称

    /*** * 根本平台类型获取文件名 */ function showGetFileName($type,$url){ #判断平台类型 if($type=='android'||$type=='ios ...

  7. Android实现点击通知栏后,先启动应用再打开目标Activity ,极光推送等推送的也可以参考一下(转)

    我因为项目中集成了极光推送,推送的通知栏点开需要确定进入哪个界面就参考了这边文章,感谢作者的无私. 标签: 情况简述 在开发Android app的过程中,遇到这样一个需求:app中启动一个Servi ...

  8. KVM和QEMU的关系(转载)

    From:http://blog.sina.com.cn/s/blog_605f5b4f0102uyjv.html KVM是一种基于CPU硬件辅助的全虚拟化技术,没有CPU硬件虚拟化的支持,KVM无法 ...

  9. 我在面试.NET/C#程序员时会提出的问题(转载)

    转自:http://blog.zhaojie.me/2011/03/my-interview-questions-for-dotnet-programmers.html 说起来我也面试过相当数量的.N ...

  10. 全文检索引擎Solr的配置

    描述: 在Linux环境下实现高速的全文检索 一.当前环境: CentOS (Linux) 6.3 64 bit 二.所需软件 1.Java的JDK Java jdk 1.7.0[注意:solr5.x ...