当前位置:网站首页 > 编程语言 > 正文

阻塞队列实现原理(阻塞队列的原理)



阻塞队列,关键字是阻塞,先理解阻塞的含义,在阻塞队列中,线程阻塞有这样的两种情况:

  1. 当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放
    入队列。

  2. 当队列中填满数据的情况下,生产者端的所有线程都会被自动阻塞(挂起),直到队列中有
    空的位置,线程被自动唤醒。

1. 阻塞队列的主要方法

插入操作
 
  

获取数据操作:

2. Java 中的阻塞队列

  1. ArrayBlockingQueue :由数组结构组成的有界阻塞队列。
  2. LinkedBlockingQueue :由链表结构组成的有界阻塞队列。
  3. PriorityBlockingQueue :支持优先级排序的无界阻塞队列。
  4. DelayQueue:使用优先级队列实现的无界阻塞队列。
  5. SynchronousQueue:不存储元素的阻塞队列。
  6. LinkedTransferQueue:由链表结构组成的无界阻塞队列。
  7. LinkedBlockingDeque:由链表结构组成的双向阻塞队列
    在这里插入图片描述

.3. ArrayBlockingQueue(公平、非公平)

4. LinkedBlockingQueue(两个独立锁提高并发)

5. PriorityBlockingQueue(compareTo 排序实现优先)

6. DelayQueue(缓存失效、定时任务 )

  1. 缓存系统的设计:可以用 DelayQueue 保存缓存元素的有效期,使用一个线程循环查询
    DelayQueue,一旦能从 DelayQueue 中获取元素时,表示缓存有效期到了。


  2. 定 时 任 务 调 度 : 使 用 DelayQueue 保 存 当 天 将 会 执 行 的 任 务 和 执 行 时 间 , 一 旦 从
    DelayQueue 中获取到任务就开始执行,从比如 TimerQueue 就是使用 DelayQueue 实现的。


7. SynchronousQueue(不存储数据、可用于传递数据)

8. LinkedTransferQueue

  1. transfer 方法:如果当前有消费者正在等待接收元素(消费者使用 take()方法或带时间限制的
    poll()方法时),transfer 方法可以把生产者传入的元素立刻 transfer(传输)给消费者。如
    果没有消费者在等待接收元素,transfer 方法会将元素存放在队列的 tail 节点,并等到该元素
    被消费者消费了才返回。







  2. tryTransfer 方法。则是用来试探下生产者传入的元素是否能直接传给消费者。如果没有消费
    者等待接收元素,则返回 false。和 transfer 方法的区别是 tryTransfer 方法无论消费者是否
    接收,方法立即返回。而 transfer 方法是必须等到消费者消费了才返回。
    对于带有时间限制的 tryTransfer(E e, long timeout, TimeUnit unit)方法,则是试图把生产者传
    入的元素直接传给消费者,但是如果没有消费者消费该元素则等待指定的时间再返回,如果超时










9. LinkedBlockingDeque

到此这篇阻塞队列实现原理(阻塞队列的原理)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 动态库和静态库谁快(动态库和静态库的使用)2026-05-22 23:36:10
  • max31865三线(ma5ma20ma30三线详解)2026-05-22 23:36:10
  • 颜色代码怎么弄(颜色代码怎么弄出来)2026-05-22 23:36:10
  • 复制代码小游戏(复制代码小游戏有哪些)2026-05-22 23:36:10
  • nfpp是什么材料(pfna是什么材料做的)2026-05-22 23:36:10
  • vb什么是方法(vb 方法)2026-05-22 23:36:10
  • vs怎么调试dll(vs怎么调试代码)2026-05-22 23:36:10
  • 瓦罗兰特代码84(瓦罗兰特代码准星)2026-05-22 23:36:10
  • 流量回放优缺点(流量录制与回放)2026-05-22 23:36:10
  • 怎么把手机信息恢复(怎样把信息恢复)2026-05-22 23:36:10
  • 全屏图片