Java源码解析阻塞队列ArrayBlockingQueue功能简介
本文基于jdk1.8进行分析。
阻塞队列是java开发时常用的一个数据结构。首先看一下阻塞队列的作用是什么。阻塞队列的作用,从源码中类的注释中来了解,是最清晰准确的。
ArrayBlockingQueue是一个用数组实现的有界阻塞队列。提供FIFO的功能。队列头上的元素是在队列中呆了最长时间的元素,队列尾上的元素是在队列中呆了时间最短的元素。新元素会插入在队列尾部,从队列获取元素时会从队列头上获取。
这是一个传统的有界队列,在这个有界队列里,一个固定大小的数组用来保存生产者产生的元素和消费者获取的元素。一旦创建,大小不可改变。往已满的队列中尝试添加元素,会阻塞操作。从空的队列中获取元素,也会阻塞操作。
这个类为等待中的生产着和消费者线程排序提供可选的公平策略。默认情况下,顺序是没有保证的。但是,一个用fairness=true创建的队列可以保证FIFO特性。公平性通常会降低吞吐量,但是可以减少易变性并避免饥饿。
/** *Abounded{@linkplainBlockingQueueblockingqueue}backedbyan *array.ThisqueueorderselementsFIFO(first-in-first-out).The *headofthequeueisthatelementthathasbeenonthe *queuethelongesttime.Thetailofthequeueisthat *elementthathasbeenonthequeuetheshortesttime.Newelements *areinsertedatthetailofthequeue,andthequeueretrieval *operationsobtainelementsattheheadofthequeue. *Thisisaclassic"boundedbuffer",inwhicha *fixed-sizedarrayholdselementsinsertedbyproducersand *extractedbyconsumers.Oncecreated,thecapacitycannotbe *changed.Attemptsto{@codeput}anelementintoafullqueue *willresultintheoperationblocking;attemptsto{@codetake}an *elementfromanemptyqueuewillsimilarlyblock. *
Thisclasssupportsanoptionalfairnesspolicyforordering *waitingproducerandconsumerthreads.Bydefault,thisordering *isnotguaranteed.However,aqueueconstructedwithfairnessset *to{@codetrue}grantsthreadsaccessinFIFOorder.Fairness *generallydecreasesthroughputbutreducesvariabilityandavoids *starvation. *
Thisclassanditsiteratorimplementallofthe *optionalmethodsofthe{@linkCollection}and{@link *Iterator}interfaces. *
Thisclassisamemberofthe *
*JavaCollectionsFramework. *@since1.5 *@authorDougLea *@param thetypeofelementsheldinthiscollection **/
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接