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
    扩容:由于是使用链表实现的,因此可以动态增加
    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    npm 常用指令
    跨域详解
    模板
    Set-Cookie
    哈佛大学公开课 幸福课 积极心理学
    Token Authentication vs. Cookies
    Using Cookieless Forms Authentication Tickets
    What Is Token-Based Authentication and Who Uses It?
    Types of authentication wiz. oauth, digest, basic, token-based
    Session Authentication vs Token Authentication
  • 原文地址:https://www.cnblogs.com/use-D/p/9717672.html
Copyright © 2011-2022 走看看