阻塞队列ArrayBlockingQueue 源码解析

导读:本篇文章讲解 阻塞队列ArrayBlockingQueue 源码解析,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

构造方法

添加元素

put

offer

带超时时间的offer

spinForTimeoutThreshold

总结

拉取元素


 BlockingQueue的实现有很多,下面主要介绍下ArrayBQ。

阻塞队列ArrayBlockingQueue 源码解析

构造方法

阻塞队列ArrayBlockingQueue 源码解析

 公平锁就是先来拉取元素的线程如果进入了等待,那么一旦有元素被添加到队列中,就会由这个线程首先去获取元素。添加也是同理。 而linkedBQ默认是非公平锁。

添加元素

put

阻塞队列ArrayBlockingQueue 源码解析

加入数组中阻塞队列ArrayBlockingQueue 源码解析

offer

add元素调用的是offer方法

阻塞队列ArrayBlockingQueue 源码解析

带超时时间的offer

阻塞队列ArrayBlockingQueue 源码解析

 

阻塞队列ArrayBlockingQueue 源码解析

spinForTimeoutThreshold

阻塞队列ArrayBlockingQueue 源码解析

自旋的时间阈值 是1微秒。

nanosTimeout > spinForTimeoutThreshold 是为了让那些超时时间非常短的线程,不去调用park

,直接快速自旋,因为这个时间非常短,没有必要进行park。

总结

add调用的是offer, add 和 offer的时候如果队列已满,会直接返回false,而put会等待直到被唤醒。

拉取元素

和添加相对应

poll对应offer, take对应put。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/92793.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!