ArrayBlockingQueue跟LinkedBlockingQueue的區別

1.隊列中的鎖的實現不同

?????? ArrayBlockingQueue中的鎖是沒有分離的,即生產和消費用的是同一個鎖;

?????? LinkedBlockingQueue中的鎖是分離的,即生產用的是putLock,消費是takeLock

?

2.在生產或消費時操作不同

?????ArrayBlockingQueue基于數組,在生產和消費的時候,是直接將枚舉對象插入或移除的,不會產生或銷毀任何額外的對象實例;

?? ? LinkedBlockingQueue基于鏈表,在生產和消費的時候,需要把枚舉對象轉換為Node<E>進行插入或移除,會生成一個額外的Node對象,這在長時間內需要高效并發地處理大批量數據的系統中,其對于GC的影響還是存在一定的區別。

?

3.隊列大小初始化方式不同

?? ? ArrayBlockingQueue是有界的,必須指定隊列的大小;

?????LinkedBlockingQueue是無界的,可以不指定隊列的大小,但是默認是Integer.MAX_VALUE。當然也可以指定隊列大小,從而成為有界的。

?

注意:?

  • 在使用LinkedBlockingQueue時,若用默認大小且當生產速度大于消費速度時候,有可能會內存溢出。
  • 在使用ArrayBlockingQueue和LinkedBlockingQueue分別對1000000個簡單字符做入隊操作時,

?? ? ? LinkedBlockingQueue的消耗是ArrayBlockingQueue消耗的10倍左右,

???????即LinkedBlockingQueue消耗在1500毫秒左右,而ArrayBlockingQueue只需150毫秒左右。

  • 按照實現原理來分析,ArrayBlockingQueue完全可以采用分離鎖,從而實現生產者和消費者操作的完全并行運行。Doug Lea之所以沒這樣去做,也許是因為ArrayBlockingQueue的數據寫入和獲取操作已經足夠輕巧,以至于引入獨立的鎖機制,除了給代碼帶來額外的復雜性外,其在性能上完全占不到任何便宜。

?

1 樓 dieslrae 2014-09-15??
數組的生產和消費怎么可以分離,每一次消費都涉及到數組元素的移動
2 樓 kidding87 2014-09-15??
dieslrae 寫道
數組的生產和消費怎么可以分離,每一次消費都涉及到數組元素的移動

ArrayBlockingQueue take操作并沒有元素的移動?
采用的是 Circularly increment?

ArrayBlockingQueue的速度是優于LinkedBlocingQeque?
他們主要的區別是在bound上?

轉載于:https://www.cnblogs.com/liuchuanfeng/p/7606479.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282286.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282286.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282286.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jqGrid('setSelection',rowid)報Cannot read property 'multiple' of undefined

項目組非要上jeeweb框架&#xff0c;用jqgrid大量iframe做為前端框架&#xff0c;臃腫不堪。 今天上午&#xff0c;在進行選定操作jqGrid(setSelection,rowid)報Cannot read property multiple of undefined&#xff0c;怎么分析也找不出原因&#xff0c;最后百度搜了一下竟然有…

數據分塊加載——BigPipe 技術【類似facebook】

一、原理 分塊加載&#xff0c;加載完一塊&#xff0c;就先把頁面數據刷給用戶&#xff0c;再加載下面的&#xff0c;直到加載完畢二、基礎需知&#xff1a;三、服務端和php的相應配置 如果想實現分塊加載【bigpipe技術】&#xff0c;還需要對nginx.conf 和 php.ini 進行相應配…

Maven -- 在進行war打包時用正式環境的配置覆蓋開發環境的配置

我們的配置文件一般都放在 src/main/resource 目錄下。 假定我們的正式環境配置放在 src/main/online-resource 目錄下。 那么打成war包時&#xff0c;我們希望用online-resource下的配置文件取代resource 下的配置文件。 pom.xml 插件配置&#xff1a; <plugin><gr…

右鍵一下,哇塞!

面向 Dev 頻道的 Windows 預覽體驗成員微軟推送了 Windows 11 預覽版Insider Preview Build 25211主要變化1.微軟改進了 Windows 11 小組件面板&#xff0c;小組件面板中的添加按鈕更加醒目&#xff0c;點擊用戶頭像將打開小組件設置。Windows 11 小組件由 Microsoft Edge 瀏覽…

前端學習 -- Css -- 內聯元素的盒模型

內聯元素不能設置width和height&#xff1b;設置水平內邊距,內聯元素可以設置水平方向的內邊距&#xff1a;padding-left&#xff0c;padding-right&#xff1b;垂直方向內邊距&#xff0c;內聯元素可以設置垂直方向內邊距&#xff0c;但是不會影響頁面的布局&#xff1b;為元素…

Redis 數據持久化的方案的實現

一、需要了解的基礎 1、Redis實現數據持久化的兩種實現方式&#xff1a; RDB&#xff1a;指定的時間間隔內保存數據快照 AOF&#xff1a;先把命令追加到操作日志的尾部&#xff0c;保存所有的歷史操作二、RDB 實現 Redis數據持久化&#xff08;默認方式&#xff09;1、編輯 red…

div剩余空間填滿

div里有一個固定高度的div使其另一個div填滿空間&#xff0c;外層div設置的高度為百分比&#xff0c;給外層一個相對定位&#xff0c;設置想要充滿的div高度為100%&#xff0c;其中這次有個要求&#xff0c;使其填充div里面的內容距離固定高度div30px&#xff1b;給填充div一個…

快速生成快遞柜唯一取件碼

曾管理一萬多臺快遞柜&#xff0c;優化了系統中生成唯一取件碼的算法。項目&#xff1a;https://github.com/nnhy/PickupCode新建項目&#xff0c;添加 Nuget 應用 NewLife.Redis &#xff0c;借助其Add去重能力。代碼如下&#xff1a;private static void Main(string[] args)…

自動調試自動編譯五分鐘上手

Browsersync能讓瀏覽器實時、快速響應您的文件更改&#xff08;html、js、css、sass、less等&#xff09;并自動刷新頁面。更重要的是 Browsersync可以同時在PC、平板、手機等設備下進項調試。 無論您是前端還是后端工程師&#xff0c;使用它將提高您30%的工作效率。 MD5加密&a…

六臺機器搭建RedisCluster分布式集群

一、RedisCluster結構二、redis Cluster集群搭建1、修改redis.conf中需要更改的配置 bind 改成當前ip cluster-enabled yes #允許redis集群 cluster-config-file nodes-6379.conf #集群配置文件 cluster-node-timeout 15000 #集群中節點允許失聯的最大時間15s 注&#xff1…

C# 的 async/await 其實是stackless coroutine

注&#xff1a; 最近Java 19引入的虛擬線程火熱&#xff0c;還有很多人羨慕 go的 coroutine&#xff0c;很多同學一直有一個疑問&#xff1a; C# 有 虛擬線程或者 coroutine嗎&#xff0c;下面的這個回答可以解決問題。這里節選的是知乎上的hez2010 的高贊回答&#xff1a;http…

推薦使用typora

最近在網上接觸到一款全新的markdown寫作工具——typora。 現在它已經是我的主要寫作工具了。 甚至我也也會利用它安排自己的工作和任務。 typora介紹 下載鏈接特色&#xff1a;可以即時渲染markdown語法的書寫工具總算找到了&#xff0c;終于不用再糾結發生語法錯誤&#xff0…

中文詞頻統計

import jiebafoopen(text.txt,r,encodingutf-8)tfo.read()fo.close() wordsjieba.cut(t)dic{}for w in words: if len(w)1: continue else: dic[w]dic.get(w,0)1wc list(dic.items())wc.sort(keylambda x:x[1],reverse True)for i in range(20): print(wc[i]) 轉載于:https:/…

實現html錨點的兩種方式

1&#xff0c;a標簽name屬性。 2&#xff0c;使用標簽的id屬性&#xff1b;

mysql實現讀寫分離

一、環境介紹&#xff1a; LNMP vmware workstation pro配置了3個虛擬機&#xff0c;均安裝了LNMP環境&#xff1a; Pro &#xff1a;192.168.0.105 Pro2&#xff1a;192.168.0.106 Pro3&#xff1a;192.168.0.107 二、Mysql主從復制同步的實現 https://blo…

[BZOJ1509][NOI2003]逃學的小孩

1509: [NOI2003]逃學的小孩 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 968 Solved: 489[Submit][Status][Discuss]Description Input 第一行是兩個整數N&#xff08;3 ? N ? 200000&#xff09;和M&#xff0c;分別表示居住點總數和街道總數。以下M行&#xff0c;每行…

十一隨筆|讀書

十一放假回老家前三天一直下雨&#xff0c;沒法幫父母干農活&#xff0c;陰雨天氣農村就閑下來了親戚間走動&#xff0c;長輩們談論孩子不好好學習&#xff0c;孩子抱怨學習沒用大學畢業照樣找不到工作。現在大學生就業現狀確實不容樂觀&#xff0c;當下不好好學習沒有拖底&…

yii之behaviors

BaseController: protected $actions [*];protected $except [];protected $mustlogin [];protected $verbs [];// 行為過濾public function behaviors(){return [access > [class > \yii\filters\AccessControl::className(),only > $this->actions, // 針對哪…

關閉 Visual Studio 2013 的 Browser Link 功能

什么是 Browser Link ? 這個 Browser Link 的功能就是通過一個腳本文件架起流程器和 Visual Studio IDE 之前的一個通信橋梁&#xff0c; 在啟用 Browser Link 后&#xff0c; Visual Studio 會給網站注入一個 IHttpModule 模塊對象&#xff0c; 然后在每個頁面都會注冊一段上…

Groove list操作-轉數組,collect,each等

2019獨角獸企業重金招聘Python工程師標準>>> list轉換為數組 List list [a,b,c,d] def strs list as String[] println strs[0] 使用了Groovy語言&#xff0c;就能時不時的感受到Groovy語言在編碼風格上與Java語言的不同。當然&#xff0c;我們首先感受到的可能就…