亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Java特性隊列和棧的堵塞原理解析

瀏覽:4日期:2022-08-22 14:22:47

做消息通信,消息會不斷從網(wǎng)絡(luò)流中取得,而后臺也有線程不斷消費。本來我一直是使用一些線程安全標識或方法來控制,后來在網(wǎng)上找到一些java新特性,里面包含了可以用到的堆棧使用,而且是堵塞的,這樣至少可以保證一些安全性。

對于堆:

BlockingQueue 不接受 null 元素。試圖 add、put 或 offer 一個 null 元素時,某些實現(xiàn)會拋出 NullPointerException。null 被用作指示 poll 操作失敗的警戒值。

BlockingQueue 可以是限定容量的。它在任意給定時間都可以有一個 remainingCapacity,超出此容量,便無法無阻塞地 put 附加元素。沒有任何內(nèi)部容量約束的 BlockingQueue 總是報告 Integer.MAX_VALUE 的剩余容量。

BlockingQueue 實現(xiàn)主要用于生產(chǎn)者-使用者隊列,但它另外還支持 Collection接口。因此,舉例來說,使用 remove(x) 從隊列中移除任意一個元素是有可能的。然而,這種操作通常不 會有效執(zhí)行,只能有計劃地偶爾使用,比如在取消排隊信息時。

BlockingQueue 實現(xiàn)是線程安全的。所有排隊方法都可以使用內(nèi)部鎖或其他形式的并發(fā)控制來自動達到它們的目的。然而,大量的 Collection 操作(addAll、containsAll、retainAll 和 removeAll)沒有 必要自動執(zhí)行,除非在實現(xiàn)中特別說明。因此,舉例來說,在只添加了 c 中的一些元素后,addAll(c) 有可能失敗(拋出一個異常)。

看一段代碼:

package com.test; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; /** * @說明 堵塞隊列和棧的使用 */ public class Test { @SuppressWarnings('unchecked') public static void main(String[] args) throws InterruptedException { BlockingQueue bqueue = new ArrayBlockingQueue(5); for (int i = 0; i < 10; i++) { // 添加元素到隊列,如果沒有可用空間,將一直等待(如果有必要) bqueue.put(i); System.out.println('添加了元素:' + i); } System.out.println('----End----'); } }

運行效果:

添加了元素:0 添加了元素:1 添加了元素:2 添加了元素:3 添加了元素:4

之后就會一直等待。

對于棧:

BlockingDeque 方法有四種形式,使用不同的方式處理無法立即滿足但在將來某一時刻可能滿足的操作:第一種方式拋出異常;第二種返回一個特殊值(null 或 false,具體取決于操作);第三種無限期阻塞當前線程,直至操作成功;第四種只阻塞給定的最大時間,然后放棄。

看一個例子:

package com.test; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; /** * @說明 堵塞隊列和棧的使用 */ public class Test { @SuppressWarnings('unchecked') public static void main(String[] args) throws InterruptedException { BlockingDeque bDeque = new LinkedBlockingDeque(5); for (int i = 0; i < 10; i++) { // 將指定元素添加到此阻塞棧中,如果沒有可用空間,將一直等待(如果有必要)。 bDeque.putFirst(i); System.out.println('添加了元素:' + i); } System.out.println('----End----'); } }

運行結(jié)果和堆一樣,也會產(chǎn)生等待。

對于兩者的解釋:

阻塞隊列的概念是,一個指定長度的隊列,如果隊列滿了,添加新元素的操作會被阻塞等待,直到有空位為止。同樣,當隊列為空時候,請求隊列元素的操作同樣會阻塞等待,直到有可用元素為止。

對于阻塞棧,與阻塞隊列相似。不同點在于棧是“后入先出”的結(jié)構(gòu),每次操作的是棧頂,而隊列是“先進先出”的結(jié)構(gòu),每次操作的是隊列頭。

注意的是,BlockingQueue是5中的特性,jdk6以后才增加了BlockingDeque。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产2 | 三a大片 | 欧美日韩精品一区二区三区视频在线 | 免费视频一区二区性色 | 免费xxxxx大片在线观看影视 | 土耳其毛片 | 欧美激情在线播放第16页 | 国产亚洲欧美视频 | 欧美日韩性视频一区二区三区 | 视频一区 精品自拍 | 在线看日本a毛片 | 在线97| 干成人网 | 亚洲一级片 | 免费的日本一级淫篇小说 | 九色在线免费观看 | 蜜臀在线观看 | 亚洲色图第十页 | 99青青青精品视频在线 | 精品福利一区 | 97国产成人精品视频 | 黄页网址免费 | 久久91视频 | 九九视频高清视频免费观看 | 国产在线观看美女福利精 | aaaa一级片 | 日本乱人伦毛片 | 国产精品偷伦视频免费观看了 | 伊人久久久久久久久久 | 国产精品视频一区二区三区经 | 色多多视频成人影院 | 日本九九精品一区二区 | 国产精品黄网站免费观看 | 美女视频黄a视频免费全过程 | 免费国产成人 | 国产成人精品免费视频动漫 | 青草青视频在线观看 | 美美女高清毛片视频黄的一免费 | 手机看片福利日韩欧美看片 | 黄色在线播放网址 | 最新91视频|