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
    扩容:由于是使用链表实现的,因此可以动态增加
    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    #Leetcode# 876. Middle of the Linked List
    #Leetcode# 237. Delete Node in a Linked List
    #Leetcode# 234. Palindrome Linked List
    #Leetcode# 149. Max Points on a Line
    #Leetcode# 152. Maximum Product Subarray
    #Leetcode# 228. Summary Ranges
    #Leetcode# 227. Basic Calculator II
    PAT 1089 狼人杀-简单版
    linux——web安全之sql注入【预习阶段】
    linux——攻防技术介绍|主动攻击|被动攻击
  • 原文地址:https://www.cnblogs.com/use-D/p/9717672.html
Copyright © 2011-2022 走看看