03.JUC 集合 - BlockingQueue
2017-02-23 22:37
239 查看
概念
BlockingQueue,即阻塞队列。它是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。
当队列满时,存储元素的线程会等待队列可用。
阻塞队列常用于生产者和消费者的场景:
生产者是往队列里添加元素的线程。
消费者是从队列里拿元素的线程。
操作
阻塞队列提供了四种处理方法:方法\处理方式 | 抛出异常 | 返回特殊值 | 一直阻塞 | 超时退出 |
---|---|---|---|---|
入队操作 | add(e) | offer(e) | put(e) | offer(e,time,unit) |
出队操作 | remove() | poll() | take() | poll(time,unit) |
查询操作 | element() | peek() |
返回特殊值:入队操作会返回布尔值;出队操作成功返回操作值,失败返回空值。
一直阻塞:满队列时,执行入队会进入条件等待队列,线程阻塞;空队列时,执行出队会进入条件等待队列,线程阻塞 。
超时退出:满队列时,执行入队会阻塞生产者线程一段时间,如果超过一定的时间,生产者线程就会退出。
类型
JDK7 提供了 7 个阻塞队列。分别是:ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。
PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
SynchronousQueue:一个不存储元素的阻塞队列。
DelayQueue:一个使用优先级队列实现的无界阻塞队列。
LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
相关文章推荐
- Java多线程系列--“JUC集合”03之 CopyOnWriteArraySet
- Java多线程系列--“JUC集合”03之 CopyOnWriteArraySet
- Java多线程系列--“JUC集合”03之 CopyOnWriteArraySet
- JUC集合-03之 CopyOnWriteArraySet
- JUC集合-BlockingQueue
- Java多线程系列--“JUC集合”03之 CopyOnWriteArraySet
- Java多线程系列--“JUC集合”03之 CopyOnWriteArraySet
- Java多线程系列--“JUC集合”03之 CopyOnWriteArraySet
- Java多线程系列--“JUC集合”08之 LinkedBlockingQueue
- Java多线程系列--“JUC集合”03之 CopyOnWriteArraySet
- Java多线程系列--【JUC集合03】- CopyOnWriteArraySet
- Java集合类(十四)JUC中的集合--CopyOnWriteArrayList
- Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例
- 04.JUC 集合 - ArrayBlockingQueue
- NHibernate考察系列 03 many-to-many 集合映射
- Java多线程系列--“JUC集合”10之 ConcurrentLinkedQueue
- Java多线程系列--【JUC集合04】- ConcurrentHashMap
- 【目录】JUC集合框架目录
- JUC集合-04之 ConcurrentHashMap
- Java多线程系列--“JUC集合”10之 ConcurrentLinkedQueue