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-12Springboot-注解-操作日志的實(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-01Springboot實(shí)現(xiàn)圖片上傳功能的示例代碼
本篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)圖片上傳功能,文中通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-09-09Java調(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-02springMvc注解之@ResponseBody和@RequestBody詳解
本篇文章主要介紹了springMvc注解之@ResponseBody和@RequestBody詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05MyBatis實(shí)現(xiàn)字段加解密的實(shí)踐
為了數(shù)據(jù)安全問(wèn)題,有時(shí)候需要將部分敏感字段加密后再入庫(kù),本文主要介紹了MyBatis實(shí)現(xiàn)字段加解密的實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11