Java中的BlockingQueue接口源碼解析
BlockingQueue
BlockingQueue接口表示阻塞隊列,是Java并發(fā)包中阻塞隊列的接口定義規(guī)范,阻塞隊列意味著對于該隊列的操作是線程安全的,當(dāng)多個線程存放元素進(jìn)入隊列或者從隊列中取出元素都是線程安全的。阻塞隊列的操作和普通隊列沒有區(qū)別,主要是加了線程安全控制,其工作原理如下圖。

1 BlockingQueue接口繼承關(guān)系
BlockingQueue是繼承自java集合框架中的Queue接口。

2 BlockingQueue接口源碼
可以看到BlockingQueue繼承自Queue接口,Queue接口也順便復(fù)習(xí)下,關(guān)于集合框架隊列的講述可以在筆者集合篇.中找到。
public interface BlockingQueue<E> extends Queue<E> {
//隊列中添加元素的方法
boolean add(E e);
boolean offer(E e);
void put(E e) throws InterruptedException;
boolean offer(E e, long timeout, TimeUnit unit)
throws InterruptedException;
//取出元素
E take() throws InterruptedException;
E poll(long timeout, TimeUnit unit)
throws InterruptedException;
boolean remove(Object o);
//
int remainingCapacity();
public boolean contains(Object o);
int drainTo(Collection<? super E> c);
int drainTo(Collection<? super E> c, int maxElements);
}
drainTo(Collection<? super E> c)方法表示將隊列元素全部移除并且放入集合c中,該方法相當(dāng)于隊列全部彈出。
public interface Queue<E> extends Collection<E> {
/**
* 添加元素,和offer方法不同的是add方法可能拋出隊列狀態(tài)異常
*/
boolean add(E e);
/**
* 添加元素
*/
boolean offer(E e);
/**
* 和poll()方法相同也是取出頭部元素,區(qū)別在于隊列為空拋出異常
*/
E remove();
/**
* 頭部取出元素
*/
E poll();
/**
* 和peek()方法相同,獲取隊列頭部元素,區(qū)別在于當(dāng)隊列為空會拋出異常
*/
E element();
/**
* 獲取隊列頭部元素,不對隊列進(jìn)行修改
*/
E peek();
}BlockingQueue的offer,poll方法實現(xiàn)了重載,可設(shè)置等待時間,其余相關(guān)操作概率完全一樣。
到此這篇關(guān)于Java中的BlockingQueue接口源碼解析的文章就介紹到這了,更多相關(guān)BlockingQueue接口源碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot視頻接口報大量的ClientAbortException找不到原因的解決
本文主要介紹了Springboot視頻接口報大量的ClientAbortException找不到原因的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
springboot手動事務(wù)回滾的實現(xiàn)代碼
這篇文章主要介紹了springboot手動事務(wù)回滾的實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
Java并發(fā)源碼分析ConcurrentHashMap線程集合
這篇文章主要為大家介紹了Java并發(fā)源碼分析ConcurrentHashMap線程集合,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Spring Boot監(jiān)聽Redis Key失效事件實現(xiàn)定時任務(wù)的示例
這篇文章主要介紹了Spring Boot監(jiān)聽Redis Key失效事件實現(xiàn)定時任務(wù)的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

