java concurent之BlockingQueue
2013-02-07 09:31
176 查看
从名字上看,BlockingQueue是阻塞队列的意思
这个队列主要提供下面的功能:
阻塞队列提供了可阻塞的take和put方法,另外可定时的poll和offer实际原理也是一样的。
如果BlockingQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒,同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有空间时才会被唤醒继续操作。
阻塞队列有一般分为两类 无限阻塞队列和有限阻塞队列。有限阻塞队列中,当队列满时,调用put方法将会阻塞;而无限阻塞队列中,put方法是不会阻塞的。
很显然这个队列的一种最常用的场景就是 生产者-消费者 模式
它有以下具体实现类:
ArrayBlockingQueue:采用数组作为存储队列的阻塞队列,这个队列采用FIFO的方式管理数据
LinkedBlockingQueue:采用链式结构作为存储队列,同样它也采用FIFO的方式管理数据
PriorityBlockingQueue:采用基于优先级堆的极大优先级队列作为存储队列。
SynchronousQueue:特殊的BlockingQueue,其中每个 put 必须等待一个 take,反之亦然。
DelayQueue:这是一个无限阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的 Delayed 元素。如果延迟都还没有期满,则队列没有头部。
通过查看源代码可以看到这个类内部是采用PriorityQueue作为存储队列
DelayQueue的一些常用的场景
a) 关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。
b) 缓存。缓存中的对象,超过了空闲时间,需要从缓存中移出。
c) 任务超时处理。在网络协议滑动窗口请求应答式交互时,处理超时未响应的请求。
这个队列主要提供下面的功能:
阻塞队列提供了可阻塞的take和put方法,另外可定时的poll和offer实际原理也是一样的。
如果BlockingQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒,同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有空间时才会被唤醒继续操作。
阻塞队列有一般分为两类 无限阻塞队列和有限阻塞队列。有限阻塞队列中,当队列满时,调用put方法将会阻塞;而无限阻塞队列中,put方法是不会阻塞的。
很显然这个队列的一种最常用的场景就是 生产者-消费者 模式
它有以下具体实现类:
ArrayBlockingQueue:采用数组作为存储队列的阻塞队列,这个队列采用FIFO的方式管理数据
LinkedBlockingQueue:采用链式结构作为存储队列,同样它也采用FIFO的方式管理数据
PriorityBlockingQueue:采用基于优先级堆的极大优先级队列作为存储队列。
SynchronousQueue:特殊的BlockingQueue,其中每个 put 必须等待一个 take,反之亦然。
DelayQueue:这是一个无限阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的 Delayed 元素。如果延迟都还没有期满,则队列没有头部。
通过查看源代码可以看到这个类内部是采用PriorityQueue作为存储队列
DelayQueue的一些常用的场景
a) 关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。
b) 缓存。缓存中的对象,超过了空闲时间,需要从缓存中移出。
c) 任务超时处理。在网络协议滑动窗口请求应答式交互时,处理超时未响应的请求。
相关文章推荐
- java中线程队列BlockingQueue的用法
- Java线程外篇:阻塞队列BlockingQueue
- Java多线程系列--“JUC集合”08之 LinkedBlockingQueue
- Java线程:阻塞队列BlockingQueue
- 【Java】BlockingQueue深入分析
- Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例
- Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析
- 黑马程序员——Java多线程—线程同步—阻塞队列:BlockingQueue
- com.esotericsoftware.kryo.kryoexception java.util.ConcurentModificationException
- Java并发库(十九):同步集合类的使用BlockingQueue、
- Java同步并发容器队列(非阻塞队列与阻塞队列)BlockingQueue家族
- Java集合源码学习(16)_BlockingQueue接口的实现ArrayBlockingQueue
- 针对Java多线程对BlockingQueue深入分析解析
- Java多线程-工具篇-BlockingQueue
- [引用]java多线程学习-java.util.concurrent详解(四) BlockingQueue
- [转载]Java多线程-工具篇-BlockingQueue
- 使用Java的BlockingQueue实现生产者-消费者
- java并发---BlockingQueue
- java中的阻塞队列BlockingQueue
- Java多线程-工具篇-BlockingQueue