創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

java 中 阻塞隊(duì)列BlockingQueue詳解及實(shí)例
BlockingQueue很好的解決了多線程中數(shù)據(jù)的傳輸,首先BlockingQueue是一個(gè)接口,它大致有四個(gè)實(shí)現(xiàn)類,這是一個(gè)很特殊的隊(duì)列,如果BlockQueue是空的,從BlockingQueue取東西的操作將會(huì)被阻斷進(jìn)入等待狀態(tài),直到BlockingQueue進(jìn)了東西才會(huì)被喚醒.同樣,如果BlockingQueue是滿的,任何試圖往里存東西的操作也會(huì)被阻斷進(jìn)入等待狀態(tài),直到BlockingQueue里有空間才會(huì)被喚醒繼續(xù)操作。
BlockingQueue的四個(gè)實(shí)現(xiàn)類:
1.ArrayBlockingQueue:規(guī)定大小的BlockingQueue,其構(gòu)造函數(shù)必須帶一個(gè)int參數(shù)來指明其大小.其所含的對(duì)象是以FIFO(先入先出)順序排序的.
2.LinkedBlockingQueue:大小不定的BlockingQueue,若其構(gòu)造函數(shù)帶一個(gè)規(guī)定大小的參數(shù),生成的BlockingQueue有大小限制,若不帶大小參數(shù),所生成的BlockingQueue的大小由Integer.MAX_VALUE來決定.其所含的對(duì)象是以FIFO(先入先出)順序排序的
3.PriorityBlockingQueue:類似于LinkedBlockQueue,但其所含對(duì)象的排序不是FIFO,而是依據(jù)對(duì)象的自然排序順序或者是構(gòu)造函數(shù)的Comparator決定的順序.
4.SynchronousQueue:特殊的BlockingQueue,對(duì)其的操作必須是放和取交替完成的.
BlockingQueue的常用方法:
1)add(anObject):把a(bǔ)nObject加到BlockingQueue里,即如果BlockingQueue可以容納,則返回true,否則報(bào)異常
2)offer(anObject):表示如果可能的話,將anObject加到BlockingQueue里,即如果BlockingQueue可以容納,則返回true,否則返回false.
3)put(anObject):把a(bǔ)nObject加到BlockingQueue里,如果BlockQueue沒有空間,則調(diào)用此方法的線程被阻斷直到BlockingQueue里面有空間再繼續(xù).
4)poll(time):取走BlockingQueue里排在首位的對(duì)象,若不能立即取出,則可以等time參數(shù)規(guī)定的時(shí)間,取不到時(shí)返回null
5)take():取走BlockingQueue里排在首位的對(duì)象,若BlockingQueue為空,阻斷進(jìn)入等待狀態(tài)直到Blocking有新的對(duì)象被加入為止
例子:
這個(gè)例子主要模擬了生產(chǎn)者和消費(fèi)者之間的工作流程,是一個(gè)簡(jiǎn)單的消費(fèi)者等待生產(chǎn)者生產(chǎn)產(chǎn)品供消費(fèi)者消費(fèi)的場(chǎng)景。
生產(chǎn)者:
package com.gefufeng;
import java.util.concurrent.BlockingQueue;
public class Producter implements Runnable{
private BlockingQueue<String> blockingQueue;
public Producter(BlockingQueue<String> blockingQueue){
this.blockingQueue = blockingQueue;
}
@Override
public void run() {
try {
blockingQueue.put("我生產(chǎn)的" + Thread.currentThread().getName());
System.out.println("我生產(chǎn)的" + Thread.currentThread().getName());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("生產(chǎn)失敗");
}
}
}
標(biāo)題名稱:java中阻塞隊(duì)列BlockingQueue詳解及實(shí)例-創(chuàng)新互聯(lián)
URL標(biāo)題:http://www.chinadenli.net/article0/dcdhoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、用戶體驗(yàn)、ChatGPT、虛擬主機(jī)、網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容