真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ConcurrentLinkedQueue和LinkedBlockingQueue如何使用

今天就跟大家聊聊有關(guān)ConcurrentLinkedQueue和LinkedBlockingQueue如何使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),石柱土家族企業(yè)網(wǎng)站建設(shè),石柱土家族品牌網(wǎng)站建設(shè),網(wǎng)站定制,石柱土家族網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,石柱土家族網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

ConcurrentLinkedQueue和LinkedBlockingQueue如何使用在Java多線程應(yīng)用中,隊(duì)列的使用率很高,多數(shù)生產(chǎn)消費(fèi)模型的首選數(shù)據(jù)結(jié)構(gòu)就是隊(duì)列(先進(jìn)先出)。Java提供的線程安全的Queue可以分為阻塞隊(duì)列和非阻塞隊(duì)列,其中阻塞隊(duì)列的典型例子是BlockingQueue,非阻塞隊(duì)列的典型例子是ConcurrentLinkedQueue,在實(shí)際應(yīng)用中要根據(jù)實(shí)際需要選用阻塞隊(duì)列或者非阻塞隊(duì)列。

注:什么叫線程安全?這個首先要明確。線程安全就是說多線程訪問同一代碼,不會產(chǎn)生不確定的結(jié)果。

并行和并發(fā)區(qū)別

1、并行是指兩者同時執(zhí)行一件事,比如賽跑,兩個人都在不停的往前跑;
2、并發(fā)是指資源有限的情況下,兩者交替輪流使用資源,比如一段路(單核CPU資源)同時只能過一個人,A走一段后,讓給B,B用完繼續(xù)給A ,交替使用,目的是提高效率

LinkedBlockingQueue
由于LinkedBlockingQueue實(shí)現(xiàn)是線程安全的,實(shí)現(xiàn)了先進(jìn)先出等特性,是作為生產(chǎn)者消費(fèi)者的首選,LinkedBlockingQueue 可以指定容量,也可以不指定,不指定的話,默認(rèn)最大是Integer.MAX_VALUE,其中主要用到put和take方法,put方法在隊(duì)列滿的時候會阻塞直到有隊(duì)列成員被消費(fèi),take方法在隊(duì)列空的時候會阻塞,直到有隊(duì)列成員被放進(jìn)來。

ConcurrentLinkedQueue和LinkedBlockingQueue如何使用

ConcurrentLinkedQueue和LinkedBlockingQueue如何使用

ConcurrentLinkedQueue和LinkedBlockingQueue如何使用

ConcurrentLinkedQueue和LinkedBlockingQueue如何使用

ConcurrentLinkedQueue

ConcurrentLinkedQueue是Queue的一個安全實(shí)現(xiàn).Queue中元素按FIFO原則進(jìn)行排序.采用CAS操作,來保證元素的一致性。
LinkedBlockingQueue是一個線程安全的阻塞隊(duì)列,它實(shí)現(xiàn)了BlockingQueue接口,BlockingQueue接口繼承自java.util.Queue接口,并在這個接口的基礎(chǔ)上增加了take和put方法,這兩個方法正是隊(duì)列操作的阻塞版本。

ConcurrentLinkedQueue和LinkedBlockingQueue如何使用ConcurrentLinkedQueue和LinkedBlockingQueue如何使用

運(yùn)行結(jié)果:

costtime 2360ms

改用while (queue.size()>0)后
運(yùn)行結(jié)果:
cost time 46422ms

結(jié)果居然相差那么大,看了下ConcurrentLinkedQueue的API原來.size()是要遍歷一遍集合的,難怪那么慢,所以盡量要避免用size而改用isEmpty().

總結(jié)了下, 在單位缺乏性能測試下,對自己的編程要求更加要嚴(yán)格,特別是在生產(chǎn)環(huán)境下更是要小心謹(jǐn)慎。

使用場景:

適用阻塞隊(duì)列的好處:多線程操作共同的隊(duì)列時不需要額外的同步,另外就是隊(duì)列會自動平衡負(fù)載,即那邊(生產(chǎn)與消費(fèi)兩邊)處理快了就會被阻塞掉,從而減少兩邊的處理速度差距,自動平衡負(fù)載這個特性就造成它能被用于多生產(chǎn)者隊(duì)列,因?yàn)槟闵啥嗔耍?duì)列滿了)你就要阻塞等著,直到消費(fèi)者消費(fèi)使隊(duì)列不滿你才可以繼續(xù)生產(chǎn)。 當(dāng)許多線程共享訪問一個公共 collection 時,ConcurrentLinkedQueue 是一個恰當(dāng)?shù)倪x擇。 
LinkedBlockingQueue 多用于任務(wù)隊(duì)列(單線程發(fā)布任務(wù),任務(wù)滿了就停止等待阻塞,當(dāng)任務(wù)被完成消費(fèi)少了又開始負(fù)載 發(fā)布任務(wù)) 
ConcurrentLinkedQueue 多用于消息隊(duì)列(多個線程發(fā)送消息,先隨便發(fā)來,不計并發(fā)的-cas特點(diǎn))

多個生產(chǎn)者,對于LBQ性能還算可以接受;但是多個消費(fèi)者就不行了mainLoop需要一個timeout的機(jī)制,否則空轉(zhuǎn),cpu會飆升的。LBQ正好提供了timeout的接口,更方便使用 如果CLQ,那么我需要收到處理sleep

看完上述內(nèi)容,你們對ConcurrentLinkedQueue和LinkedBlockingQueue如何使用有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


網(wǎng)頁題目:ConcurrentLinkedQueue和LinkedBlockingQueue如何使用
文章網(wǎng)址:http://weahome.cn/article/pjsgdj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部