7.juc阻塞队列介绍

7.juc阻塞队列介绍,第1张

并发编程学习目录

并发编程(1)-java中的6中线程状态
并发编程(2)-怎么中断线程?
并发编程(3)-synchronized的实现原理
并发编程(4)-深入理解volatile关键字
并发编程(5)-ReentrantLock源码分析
并发编程(6)-Condition源码分析

什么叫阻塞队列?

队列是一种只允许在一端进行删除 *** 作,在另一端进行插入 *** 作的线性表,允许插入的一端称为队尾、允许删除的一端称为队头。那么阻塞队列,实际上是在队列的基础上增加了两个 *** 作。
支持阻塞插入:队列满了的情况下,会阻塞继续往队列中添加数据的线程,直到队列元素被释放。
只是阻塞移除:队列为空的情况下,会阻塞从队列中获取元素的线程,直到队列添加了新的元素。

ArrayBlockingQueue
添加元素
针对队列满了之后的不同的处理策略

  • add -> 如果队列满了,抛出异常
  • offer -> true/false , 添加成功返回true,否则返回false
  • put -> 如果队列满了,则一直阻塞
  • offer(timeout) , 带了一个超时时间。如果添加一个元素,队列满了,此时会阻塞timeout时长,超过阻塞时长,返回false。

移除元素

  • element-> 队列为空,抛异常
  • peek -> true/false , 移除成功返回true,否则返回false
  • take -> 一直阻塞
  • poll(timeout) -> 如果超时了,还没有元素,则返回null

ArrayBlockingQueue 基于数组结构
LinkedBlockingQueue 基于链表结构
PriorityBlcokingQueue 基于优先级队列
DelayQueue 允许延时执行的队列
SynchronousQueue 没有任何存储结构的的队列

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/722121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存