成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java并發(fā)編程學(xué)習(xí)之阻塞隊列

YJNldm / 1941人閱讀

摘要:是線程安全的存取隊列,繼承了。接口插入方法阻塞隊列滿了,拋出異常。如果隊列不為空,返回頭結(jié)點但不刪除,如果隊列為空,返回子類一個由數(shù)組結(jié)構(gòu)組成的有界阻塞隊列。一個由鏈表結(jié)構(gòu)組成的有界阻塞隊列。一個支持優(yōu)先級排序的無界阻塞隊列。

BlockingQueue

BlockingQueue是線程安全的存取隊列,繼承了Queue。

使用場景

消費者生產(chǎn)者模式。

生產(chǎn)者,一直會往隊列里扔數(shù)據(jù),直到隊列滿了,開始阻塞,等待消費者取數(shù)據(jù)。

消費者,一直會從隊列里取數(shù)據(jù),直到隊列空了,開始阻塞,等待生產(chǎn)者扔數(shù)據(jù)。

接口

插入方法

add:阻塞隊列滿了,拋出IllegalStateException異常。成功返回true。

offer:插入成功,返回true,插入失敗,返回false。

put:阻塞隊列滿了,就等到,可被中斷,拋出InterruptedException異常

移除方法

remove:成功返回true,為空拋出NoSuchElementException異常

poll:如果隊列不為空,移除并返回頭結(jié)點,如果隊列為空,返回null

take:如果隊列不為空,移除并返回頭結(jié)點,如果隊列為空,則等待,可被中斷,拋出InterruptedException異常

檢查方法:

element:如果隊列不為空,返回頭結(jié)點但不刪除,如果隊列為空,拋出NoSuchElementException異常。

peek:如果隊列不為空,返回頭結(jié)點但不刪除,如果隊列為空,返回null

子類

ArrayBlockingQueue:一個由數(shù)組結(jié)構(gòu)組成的有界阻塞隊列。

LinkedBlockingQueue:一個由鏈表結(jié)構(gòu)組成的有界阻塞隊列。

PriorityBlockingQueue:一個支持優(yōu)先級排序的無界阻塞隊列。

DelayQueue:一個使用優(yōu)先級排序?qū)崿F(xiàn)的無界阻塞隊列。

SynchronousQueue:一個不存儲元素的阻塞隊列。

LinkedTransferQueue:一個由鏈表結(jié)構(gòu)組成的無界阻塞隊列。

LinkedBlockingDeque:一個由鏈表結(jié)構(gòu)組成的雙向阻塞隊列。

ArrayBlockingQueue

先進先出,初始化必須給數(shù)組大小,只有一個鎖。

LinkedBlockingQueue

先進先出,初始化沒有給鏈表帶下,默認為Integer.MAX_VALUE,有兩個鎖。

PriorityBlockingQueue

可以直接通過Comparator或者Collection的Comparator進行排序,一個鎖。

DelayQueue

DelayQueue中的對象必須實現(xiàn)Delayed接口,延時取元素。
使用場景:

訂單到期未付款,取消訂單

刪除過期的緩存

SynchronousQueue

因為不存儲數(shù)據(jù),所以每一次put,都要等待一個take。

LinkedTransferQueue

先進先出,如果消費者在等待接收元素,transfer方法把元素直接給消費者,如果沒有,則放對隊列的尾節(jié)點,并等到消費結(jié)束后返回。tryTransfer無論消費者是否消費,都直接返回。

LinkedBlockingDeque

頭部和尾部,都可以添加或移除元素。工作密取,就是用這個

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75681.html

相關(guān)文章

  • java并發(fā)編程學(xué)習(xí)之線程池-ThreadPoolExecutor(三)

    摘要:是所有線程池實現(xiàn)的父類,我們先看看構(gòu)造函數(shù)構(gòu)造參數(shù)線程核心數(shù)最大線程數(shù)線程空閑后,存活的時間,只有線程數(shù)大于的時候生效存活時間的單位任務(wù)的阻塞隊列創(chuàng)建線程的工程,給線程起名字當線程池滿了,選擇新加入的任務(wù)應(yīng)該使用什么策略,比如拋異常丟棄當前 ThreadPoolExecutor ThreadPoolExecutor是所有線程池實現(xiàn)的父類,我們先看看構(gòu)造函數(shù) 構(gòu)造參數(shù) corePool...

    阿羅 評論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之AQS

    摘要:原理全稱,當線程去獲取資源的時候,會根據(jù)狀態(tài)值來判斷是否有鎖,如果有鎖,則加入到鏈表,鏈表里的線程,通過自旋,判斷資源是否已經(jīng)釋放,如果釋放,則獲取資源。 原理 全稱AbstractQueuedSynchronizer,當線程去獲取資源的時候,會根據(jù)狀態(tài)值state來判斷是否有鎖,如果有鎖,則加入到鏈表,鏈表里的線程,通過自旋,判斷資源是否已經(jīng)釋放,如果釋放,則獲取資源。 AQS結(jié)構(gòu) ...

    Tikitoo 評論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之顯示鎖Lock

    摘要:顯示鎖和內(nèi)置鎖內(nèi)置鎖優(yōu)勢代碼簡潔不會因為沒釋放鎖,導(dǎo)致鎖泄露。顯示鎖優(yōu)勢靈活性強,鎖的獲取可以被中斷,可以嘗試獲取鎖。接口接口主要方法如下獲取鎖嘗試獲取鎖,表示未加鎖的情況。會進行搶鎖操作,如果獲取不到鎖,也會進入阻塞隊列等到喚醒。 顯示鎖和內(nèi)置鎖 內(nèi)置鎖(Synchronized)優(yōu)勢 代碼簡潔 不會因為沒釋放鎖,導(dǎo)致鎖泄露。 顯示鎖(Lock)優(yōu)勢 靈活性強,鎖的獲取可以被中...

    zone 評論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之ConcurrentHashMap(JDK1.7)

    摘要:之前中提過,并發(fā)的時候,可能造成死循環(huán),那么在多線程中可以用來避免這一情況。默認,當容量大于時,開始擴容并發(fā)數(shù),默認,直接影響和的值,以及的初始化數(shù)量。初始化的數(shù)量,為最接近且大于的辦等于的次方的值,比如,數(shù)量為,,數(shù)量為。 之前HashMap中提過,并發(fā)的時候,可能造成死循環(huán),那么在多線程中可以用ConcurrentHashMap來避免這一情況。 Segment Concurrent...

    piglei 評論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之Fork/Join 框架-基本概念(一)

    摘要:思想把大任務(wù)分割成多個小任務(wù),再把小任務(wù)的結(jié)果匯總,最終得到大任務(wù)的結(jié)果。當一個線程執(zhí)行完當前隊列的任務(wù)時,他就會去竊取其他隊列的任務(wù)來執(zhí)行。當雙端隊列只有一個任務(wù)時,線程之間會競爭。 思想 把大任務(wù)分割成多個小任務(wù),再把小任務(wù)的結(jié)果匯總,最終得到大任務(wù)的結(jié)果。 步驟如下: 任務(wù)分割 結(jié)果匯總 示例圖 showImg(https://segmentfault.com/img/bVb...

    hikui 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<