zoukankan      html  css  js  c++  java
  • 阻塞队列整理

    ArrayBlockingQueue
    基于同一个ReentrantLock锁实现线程安全,同时记录takeIndex与putIndex两个索引用于拿取和增加队列索引
    使用集合实现的有界队列,一旦创建ArrayBlockingQueue对象,容量就固定了,对于排队等待的生产者或者消费者线程ArrayBlockingQueue支持公平的策略
    通过使用ReentrantLock实现公平锁和非公平锁
    FIFO先进先出

    添加节点到一个满的队列中,则会导致阻塞操作

    获得几点从一个空的队列中,则会导致阻塞操作
     
    线程:安全,基于同一个ReentrantLock下两个Condition,一个notEmpty(Condition for waiting takes),一个notFull(Condition for waiting puts ),
    实现方式:Object数组,
    初始大小:自定义大小
    扩容:不能扩容,创建对象时初始化大小后不能修改容量
     
     
    LinkedBlockingQueue
    基于两个锁实现线程安全访问,takeLock锁(ReentrantLock)与putLock锁(ReentrantLock)
    count队列数量变量时AtomicInteger原子int类型,
    LinkedBlockingQueue比基于集合实现的ArrayBlockingQueue有更高的吞吐量,但是在大多数并发应用中比ArrayBlockingQueue难以预算的性能
    可以通过在构造函数中限定容量来防止容量过度膨胀
    基于单向链表的阻塞队列,
    FIFO先进先出
    head节点是队列中保留时间最长的
    tail节点时队列中保留时间最短的
    新增节点从tail节点开始增加
    线程:安全,基于两个ReentrantLock实现,一个takeLock锁(ReentrantLock),基于takeLock锁的notEmpty(Condition for waiting takes)一个putLock锁(ReentrantLock),基于takeLock锁的notFull(Condition for waiting puts )
    实现方式:Object数组,同时又takeIndex与putIndex两个索引用于拿取和增加队列索引
    初始大小:自定义大小,最大容量为Integer.Maxvalue
    扩容:由于是使用链表实现的,因此可以动态增加
    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    day03—JavaScript中DOM的Event事件方法
    day02-Javascript之document.write()方法
    day01-JavaScript中"Uncaught TypeError: Cannot set property 'innerHTML' of null"错误
    Linux安装Tomcat8
    CentOS7安装jdk8及环境变量配置
    Linux命令之lsof
    java如何停止一个运行的线程?
    大数据技术之Hadoop(HDFS)
    大数据技术之Hadoop入门
    用word2013 把word 文档发送到博客园
  • 原文地址:https://www.cnblogs.com/use-D/p/9717672.html
Copyright © 2011-2022 走看看