国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java中LinkedBlockingQueue與ArrayBlockingQueue的異同

2019-11-26 13:57:44
字體:
來源:轉載
供稿:網友

相同:

1、LinkedBlockingQueue和ArrayBlockingQueue都實現了BlockingQueue接口;

2、LinkedBlockingQueue和ArrayBlockingQueue都是可阻塞的隊列

  內部都是使用ReentrantLock和Condition來保證生產和消費的同步;

  當隊列為空,消費者線程被阻塞;當隊列裝滿,生產者線程被阻塞;

使用Condition的方法來同步和通信:await()和signal()

不同:

1、由上圖可以看出,他們的鎖機制不同

  LinkedBlockingQueue中的鎖是分離的,生產者的鎖PutLock,消費者的鎖takeLock

  而ArrayBlockingQueue生產者和消費者使用的是同一把鎖;

2、他們的底層實現機制也不同

  LinkedBlockingQueue內部維護的是一個鏈表結構

在生產和消費的時候,需要創建Node對象進行插入或移除,大批量數據的系統中,其對于GC的壓力會比較大

  而ArrayBlockingQueue內部維護了一個數組

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

 3、構造時候的區別

  LinkedBlockingQueue有默認的容量大小為:Integer.MAX_VALUE,當然也可以傳入指定的容量大小

  ArrayBlockingQueue在初始化的時候,必須傳入一個容量大小的值

  看其提供的構造方法就能知道

4、執行clear()方法

  LinkedBlockingQueue執行clear方法時,會加上兩把鎖

 5、統計元素的個數

  LinkedBlockingQueue中使用了一個AtomicInteger對象來統計元素的個數

  ArrayBlockingQueue則使用int類型來統計元素

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 无极县| 高碑店市| 承德县| 八宿县| 合作市| 南川市| 巢湖市| 常州市| 榆中县| 娱乐| 东辽县| 锦屏县| 德兴市| 宜川县| 丽水市| 金寨县| 金平| 浪卡子县| 思茅市| 茌平县| 北海市| 邛崃市| 大庆市| 习水县| 虹口区| 澄城县| 武功县| 高雄市| 启东市| 安吉县| 青田县| 郎溪县| 津市市| 当雄县| 甘洛县| 白银市| 秦皇岛市| 昌宁县| 准格尔旗| 石棉县| 新营市|