queue
Kincym
这个作者很懒,什么都没留下…
展开
-
阻塞queue系列之ArrayBlockingQueue
extends AbstractQueueimplements BlockingQueue, java.io.Serializable一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列检索操作则是从队列头部开始获得元素。添加和删除使用的是同一把锁Reentr...原创 2017-12-20 23:07:34 · 828 阅读 · 0 评论 -
阻塞queue系列之LinkedBlockingDeque
LinkedBlockingDeque是一个基于链表的双端阻塞队列。 LinkedBlockingDeque使用的是一把锁。 其它基本和LinkedBlockingQueue无异,前往LinkedBlockingQueue原创 2017-12-21 00:26:16 · 370 阅读 · 0 评论 -
阻塞queue系列之LinkedBlockingQueue
LinkedBlockingQueue继承AbstractQueue,实现了BlockingQueue,Serializable接口。内部使用单向链表存储数据。可定义容量,默认初始化容量是Integer最大值(可能出现内存溢出)。插入和取出使用不同的锁,putLock插入锁,takeLock取出锁,添加和删除数据的时候可以并行。多CPU情况下可以同一时刻既消费又生产。LinkedBlockingQu原创 2017-12-21 00:13:51 · 791 阅读 · 0 评论 -
阻塞queue系列之PriorityBlockingQueue
和ArrayBlockingQueue一样内部使用数组实现,插入和获取数据使用同一把锁。不同的是,不管有无指定长度,都会实现可以实现自动扩容;在构造函数需传入comparator,用于插入元素时继续排序,若没有传入comparator,则插入的元素必须实现Comparatable接口。构造函数 public PriorityBlockingQueue() { this(DEFAULT原创 2017-12-21 00:56:52 · 5603 阅读 · 2 评论 -
阻塞queue系列之DelayQueue
DelayQueue是一个无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的Delayed 元素。底层也是通过数组实现,所以读写操作使用的是同一把锁,其插入的元素必须实现Delayed接口。构造方法public DelayQueue() {}public DelayQueue(Collection<? extends E> c) { this.ad原创 2017-12-21 10:48:58 · 633 阅读 · 0 评论 -
阻塞queue系列之LinkedTransferQueue
LinkedTransferQueue在JDK7 中新增的。无界FIFO线程安全的阻塞队列。 transfer 算法比较复杂,实现很难看明白。大致的理解是采用所谓双重数据结构 (dual data structures) 。之所以叫双重,其原因是方法都是通过两个步骤完成:保留与完成。比如消费者线程从一个队列中取元素,发现队列为空,他就生成一个空元素放入队列 , 所谓空元素就是数据项字段为空。然后原创 2017-12-21 16:03:28 · 699 阅读 · 0 评论 -
阻塞queue系列之SynchronousQueue
SynchronousQueue是这样一种阻塞队列,其中每个 put 必须等待一个 take,反之亦然。同步队列没有任何内部容量,甚至连一个队列的容量都没有。 常用方法 add @Test public void addAndtake() throws InterruptedException { // Executors.newCachedThreadPool().原创 2017-12-21 16:35:29 · 473 阅读 · 0 评论