并发编程(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 没有任何存储结构的的队列
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)