目录
BlockingQueue的实现有很多,下面主要介绍下ArrayBQ。
构造方法
公平锁就是先来拉取元素的线程如果进入了等待,那么一旦有元素被添加到队列中,就会由这个线程首先去获取元素。添加也是同理。 而linkedBQ默认是非公平锁。
添加元素
put
加入数组中
offer
add元素调用的是offer方法
带超时时间的offer
spinForTimeoutThreshold
自旋的时间阈值 是1微秒。
nanosTimeout > spinForTimeoutThreshold 是为了让那些超时时间非常短的线程,不去调用park
,直接快速自旋,因为这个时间非常短,没有必要进行park。
总结
add调用的是offer, add 和 offer的时候如果队列已满,会直接返回false,而put会等待直到被唤醒。
拉取元素
和添加相对应
poll对应offer, take对应put。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/92793.html