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

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

2 BlockingQueue接口源碼
可以看到BlockingQueue繼承自Queue接口,Queue接口也順便復(fù)習(xí)下,關(guān)于集合框架隊(duì)列的講述可以在筆者集合篇.中找到。
public interface BlockingQueue<E> extends Queue<E> {
//隊(duì)列中添加元素的方法
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)方法表示將隊(duì)列元素全部移除并且放入集合c中,該方法相當(dāng)于隊(duì)列全部彈出。
public interface Queue<E> extends Collection<E> {
/**
* 添加元素,和offer方法不同的是add方法可能拋出隊(duì)列狀態(tài)異常
*/
boolean add(E e);
/**
* 添加元素
*/
boolean offer(E e);
/**
* 和poll()方法相同也是取出頭部元素,區(qū)別在于隊(duì)列為空拋出異常
*/
E remove();
/**
* 頭部取出元素
*/
E poll();
/**
* 和peek()方法相同,獲取隊(duì)列頭部元素,區(qū)別在于當(dāng)隊(duì)列為空會(huì)拋出異常
*/
E element();
/**
* 獲取隊(duì)列頭部元素,不對(duì)隊(duì)列進(jìn)行修改
*/
E peek();
}BlockingQueue的offer,poll方法實(shí)現(xiàn)了重載,可設(shè)置等待時(shí)間,其余相關(guān)操作概率完全一樣。
到此這篇關(guān)于Java中的BlockingQueue接口源碼解析的文章就介紹到這了,更多相關(guān)BlockingQueue接口源碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java阻塞延遲隊(duì)列DelayQueue原理及使用詳解
這篇文章主要介紹了Java阻塞延遲隊(duì)列DelayQueue原理及使用詳解,阻塞隊(duì)列是一個(gè)支持兩個(gè)附加操作的隊(duì)列,這兩個(gè)附加的操作是:在隊(duì)列為空時(shí),從隊(duì)列中獲取元素的消費(fèi)者線程會(huì)一直等待直到隊(duì)列變?yōu)榉强?需要的朋友可以參考下2023-12-12
Springboot-注解-操作日志的實(shí)現(xiàn)方式
這篇文章主要介紹了Springboot-注解-操作日志的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
淺談mybatis-plus批量保存異常及效率優(yōu)化
本文主要介紹了mybatis-plus批量保存異常及效率優(yōu)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01
Springboot實(shí)現(xiàn)圖片上傳功能的示例代碼
本篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)圖片上傳功能,文中通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-09-09
Java調(diào)用Shell命令和腳本的實(shí)現(xiàn)
這篇文章主要介紹了Java調(diào)用Shell命令和腳本的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
springMvc注解之@ResponseBody和@RequestBody詳解
本篇文章主要介紹了springMvc注解之@ResponseBody和@RequestBody詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
MyBatis實(shí)現(xiàn)字段加解密的實(shí)踐
為了數(shù)據(jù)安全問(wèn)題,有時(shí)候需要將部分敏感字段加密后再入庫(kù),本文主要介紹了MyBatis實(shí)現(xiàn)字段加解密的實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11

