日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

10019---【Java并发之】BlockingQueue

發布時間:2024/3/13 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 10019---【Java并发之】BlockingQueue 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文

本文主要講的是并發包中涉及到的集合,關于普通集合,請參考【java 集合概覽】

一、什么是BlockingQueue

BlockingQueue阻塞隊列,從阻塞這個詞可以看出,在某些情況下對阻塞隊列的訪問可能會造成阻塞。被阻塞的情況主要有如下兩種:

1. 當隊列滿了的時候進行入隊列操作
2. 當隊列空了的時候進行出隊列操作

因此,當一個線程試圖對一個已經滿了的隊列進行入隊列操作時,它將會被阻塞,除非有另一個線程做了出隊列操作;同樣,當一個線程試圖對一個空隊列進行出隊列操作時,它將會被阻塞,除非有另一個線程進行了入隊列操作。

在Java中,BlockingQueue的接口位于java.util.concurrent 包中(在Java5版本開始提供),由上面介紹的阻塞隊列的特性可知,阻塞隊列是線程安全的

二、BlockingQueue的用法

阻塞隊列主要用在生產者/消費者的場景,下面這幅圖展示了一個線程生產、一個線程消費的場景:


? ? ? ?負責生產的線程不斷的制造新對象并插入到阻塞隊列中,直到達到這個隊列的上限值。隊列達到上限值之后生產線程將會被阻塞,直到消費的線程對這個隊列進行消費。同理,負責消費的線程不斷的從隊列中消費對象,直到這個隊列為空,當隊列為空時,消費線程將會被阻塞,除非隊列中有新的對象被插入。

三、BlockingQueue接口中的方法

阻塞隊列一共有四套方法分別用來進行insertremoveexamine,當每套方法對應的操作不能馬上執行時會有不同的反應,下面這個表格就分類列出了這些方法:?


這四套方法對應的特點分別是:

1. ThrowsException:如果操作不能馬上進行,則拋出異常
2. SpecialValue:如果操作不能馬上進行,將會返回一個特殊的值,一般是true或者false
3. Blocks:如果操作不能馬上進行,操作會被阻塞
4. TimesOut:如果操作不能馬上進行,操作會被阻塞指定的時間,如果指定時間沒執行,則返回一個特殊值,一般是true或者false

需要注意的是,我們不能向BlockingQueue中插入null,否則會報NullPointerException。

四、BlockingQueue的實現類

BlockingQueue只是java.util.concurrent包中的一個接口,而在具體使用時,我們用到的是它的實現類,當然這些實現類也位于java.util.concurrent包中。在Java6中,BlockingQueue的實現類主要有以下幾種:

1. ArrayBlockingQueue 2. DelayQueue 3. LinkedBlockingQueue 4. PriorityBlockingQueue 5. SynchronousQueue下面我們就分別介紹這幾個實現類。

4.1 ArrayBlockingQueue

? ? ? ? ArrayBlockingQueue是一個有邊界的阻塞隊列,它的內部實現是一個數組。有邊界的意思是它的容量是有限的,我們必須在其初始化的時候指定它的容量大小,容量大小一旦指定就不可改變

? ? ? ? ArrayBlockingQueue是以先進先出(FIFO)的方式存儲數據,最新插入的對象是尾部,最新移出的對象是頭部。下面是一個初始化和使用ArrayBlockingQueue的例子:

BlockingQueue queue = new ArrayBlockingQueue(1024); queue.put("1"); Object object = queue.take();

4.2 DelayQueue

DelayQueue阻塞的是其內部元素,DelayQueue中的元素必須實現 java.util.concurrent.Delayed接口,這個接口的定義非常簡單:

總結

以上是生活随笔為你收集整理的10019---【Java并发之】BlockingQueue的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。