本篇內(nèi)容主要講解“java高并發(fā)中的BlockingQueue分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“java高并發(fā)中的BlockingQueue分析”吧!
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、大同網(wǎng)絡(luò)推廣、微信小程序開發(fā)、大同網(wǎng)絡(luò)營銷、大同企業(yè)策劃、大同品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供大同建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
BlockingQueue就是阻塞隊(duì)列。在某些情況下對阻塞隊(duì)列的訪問可能會造成阻塞。
會產(chǎn)生阻塞的情況有以下兩種:
當(dāng)隊(duì)列滿之后,進(jìn)行入隊(duì)操作;
當(dāng)隊(duì)列空之后,進(jìn)行出隊(duì)操作;
因此,當(dāng)一個線程對一個隊(duì)列已滿的情況下進(jìn)行入隊(duì)操作就會產(chǎn)生阻塞,除非有另一個線程進(jìn)行出隊(duì)列操作。同樣當(dāng)一個線程對一個空隊(duì)列進(jìn)行出隊(duì)操作時也會被阻塞,除非有另一個線程進(jìn)行入隊(duì)操作。
根據(jù)上面的特性可以知道,阻塞隊(duì)列是線程安全的。通常用在生產(chǎn)者消費(fèi)者場景。
ArrayBlockingQueue是一個有界的阻塞隊(duì)列(容量有限),內(nèi)部使用數(shù)組實(shí)現(xiàn),以先進(jìn)先出的方式存儲數(shù)據(jù)
DelayQueue阻塞的是內(nèi)部元素,DelayQueue中的元素必須實(shí)現(xiàn)一個接口,是J.U.C中的Delay接口(繼承了Comparable接口)。DelayQueue中的元素需要進(jìn)行排序。一般情況下按照元素過期時間的優(yōu)先級進(jìn)行排序。
DelayQueue的使用場景:定時關(guān)閉連接、緩存對象、超時處理等。
LinkedBlockingQueue的大小和配置是可選的,如果初始化時指定了一個大小,那么就是有邊界的;如果不指定大小,那么就是無邊界的(默認(rèn)最大整型值,內(nèi)部實(shí)現(xiàn)是一個鏈表)。也是以先進(jìn)先出的方式存儲數(shù)據(jù)。
這是一個帶優(yōu)先級的阻塞隊(duì)列,同時也是一個無邊界的隊(duì)列,但是有排序規(guī)則的。需要注意的是PriorityBlockingQueue是允許插入null(空對象)的。插入PriorityBlockingQueue的對象必須實(shí)現(xiàn)comparable接口,隊(duì)列優(yōu)先級的排序規(guī)則就是按照對接口實(shí)現(xiàn)來定義的。
內(nèi)部僅允許容納一個元素,當(dāng)一個線程插入一個元素后就會被阻塞,除非元素被另一個線程消費(fèi)。因此又稱之為同步隊(duì)列。是一個無界非緩存的隊(duì)列,準(zhǔn)確的說他不存儲元素,只有等待元素取走之后才能放入。
到此,相信大家對“java高并發(fā)中的BlockingQueue分析”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!