首页 > 其他 > 详细

ArrayBlockingQueue源码阅读

时间:2020-01-04 18:37:57      阅读:89      评论:0      收藏:0      [点我收藏+]
由数组支持的有界阻塞队列。此队列对元素FIFO(先进先出)进行排序。队列的 开头是已在队列中停留最长时间的元素。队列的尾部是最短时间出现在队列中的元素。新元素插入到队列的尾部,并且队列检索操作在队列的开头获取元素。
这是经典的“有界缓冲区”,其中固定大小的数组包含由生产者插入并由消费者提取的元素。创建后,容量将无法更改。尝试将put元素放入完整队列将导致操作阻塞;take从空队列中尝试元素的尝试也会类似地阻塞。
此类支持可选的公平性策略,用于订购正在等待的生产者和使用者线程。默认情况下,不保证此排序。但是,使用公平性设置的队列true可以按FIFO顺序授予线程访问权限。公平通常会降低吞吐量,但会减少可变性并避免饥饿。
 
构造方法中指定其长度,重载调用其他构造方法,默认创建重入锁,同时创建两个AbstractQueuedSynchronizer.ConditionObject
技术分享图片

 

 技术分享图片

 

add():调用了offer方法,返回false时抛异常

技术分享图片技术分享图片

 

offer():    offer方法中用到了重入锁,先判断长度,再调用enqueue方法再items数组执行添加操作
技术分享图片技术分享图片

 

 

clear():将items数组清空,takeIndex、putIndex重置为0,Itrs是一个内部类,用来存放迭代器,最后唤醒其他线程

 

 

 
技术分享图片

 

 

 

ArrayBlockingQueue源码阅读

原文:https://www.cnblogs.com/gqymy/p/12149913.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!