Java队列
文章平均质量分 94
主要分享java相关队列操作
码道人生
物来顺应,未来不迎,当时不杂,既过不恋
展开
-
SynchronousQueue原理详解-非公平模式
开篇说明:本文分析采用的是jdk1.8约定:下面内容中Ref-xxx代表的是引用地址,引用对应的节点前面已经讲解了公平模式的内容,今天来讲解下关于非公平模式下的SynchronousQueue是如何进行工作的,在源码分析的时候,先来简单看一下非公平模式的简单原理,它采用的栈这种FILO先进后出的方式进行非公平处理,它内部有三种状态,分别是REQUEST,DATA,FULFILLING,其中REQUEST代表的数据请求的操作也就是take操作,而DATA表示的是数据也就是Put操作将数据存放到栈中,原创 2021-06-15 14:51:57 · 300 阅读 · 0 评论 -
SynchronousQueue原理详解-公平模式
一、介绍SynchronousQueue是一个双栈双队列算法,无空间的队列或栈,任何一个对SynchronousQueue写需要等到一个对SynchronousQueue的读操作,反之亦然。一个读操作需要等待一个写操作,相当于是交换通道,提供者和消费者是需要组队完成工作,缺少一个将会阻塞线程,知道等到配对为止。SynchronousQueue是一个队列和栈算法实现,在SynchronousQueue中双队列FIFO提供公平模式,而双栈LIFO提供的则是非公平模式。对于SynchronousQueue来原创 2021-06-15 14:50:22 · 597 阅读 · 1 评论 -
浅析PriorityBlockingQueue优先级队列原理
介绍当你看本文时,需要具备以下知识点二叉树、完全二叉树、二叉堆、二叉树的表示方法如果上述内容不懂也没关系可以先看概念。PriorityBlockingQueue是一个无界的基于数组的优先级阻塞队列,数组的默认长度是11,虽然指定了数组的长度,但是可以无限的扩充,直到资源消耗尽为止,每次出队都返回优先级别最高的或者最低的元素。其实内部是由平衡二叉树堆来进行排序的,先进行构造二叉树堆,二叉树堆排序出来的数每次第一个元素和最后一个元素进行交换,这样最大的或最小的数就到了最后面,然后最后一个不变,重新构原创 2021-06-15 14:48:48 · 529 阅读 · 0 评论 -
DelayQueue延迟队列原理剖析
介绍DelayQueue队列是一个延迟队列,DelayQueue中存放的元素必须实现Delayed接口的元素,实现接口后相当于是每个元素都有个过期时间,当队列进行take获取元素时,先要判断元素有没有过期,只有过期的元素才能出队操作,没有过期的队列需要等待剩余过期时间才能进行出队操作。源码分析DelayQueue队列内部使用了PriorityQueue优先队列来进行存放数据,它采用的是二叉堆进行的优先队列,使用ReentrantLock锁来控制线程同步,由于内部元素是采用的PriorityQueue来原创 2021-06-15 14:48:04 · 538 阅读 · 0 评论 -
ArrayBlockingQueue原理详解
介绍ArrayBlockingQueue是基于数组实现的共享通道,为什么说是共享通道,假说线程A希望给线程B发一个消息,用什么方式来告知线程B是比较合适的呢?可以使用BlockingQueue来实现。通过上图中的继承关系我们可以清晰的发现ArrayBlockingQueue是BlockingQueue接口的实现,通过名称可以得出它是基于数组实现的,所以更适合做有界的队列。刚才也提到过它是作为数据共享来进行的线程间数据的传递,那么问题来了,当队列中为空的时候消费队列的线程如何知道队列中有新的元素添加进原创 2021-06-15 14:45:36 · 1400 阅读 · 2 评论 -
LinkedBlockingQueue原理详解
简述前面已经介绍过关于ArrayBlockingQueue相关原理性内容,我们前面讲过ArrayBlockingQueue是基于数组的方式实现的,那么LinkedBlockingQueue是基于链表的形式实现。先来看一下LinkedBlockingQueue的UML,如下所示:通过上面的UML可以看到,他也是BlockingQueue的实现,也就是他的核心在于Blocking(阻塞)这个上面,在讲解ArrayBlockingQueue的时候,可以清晰的得出ArrayBlockingQueue是使用了独原创 2021-06-15 14:44:51 · 2051 阅读 · 1 评论 -
ArrayDeque原理详解
介绍ArrayDeque是双向队列,线程不安全的双向队列,长度可以自己扩容的双向队列,并且长度需要是2的幂次方,双端主要是头部和尾部两端都可以进行插入删除和获取操作,该实现类实现了Deque接口,Deque接口提供了双向队列需要实现的方法,接口提供了从头部插入、尾部插入,从头部获取、尾部获取以及删除等操作。ArrayDeque从名称来看能看出ArrayDeque内部使用的是数组来进行存储元素。类图通过类图也可以清晰的看到ArrayDeque继承自Deque接口,并且继承自Queue接口。同时也继承自原创 2021-06-15 14:42:42 · 491 阅读 · 0 评论