程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java中LinkedBlockingQueue與ArrayBlockingQueue的異同

java中LinkedBlockingQueue與ArrayBlockingQueue的異同

編輯:關於JAVA

java中LinkedBlockingQueue與ArrayBlockingQueue的異同。本站提示廣大學習愛好者:(java中LinkedBlockingQueue與ArrayBlockingQueue的異同)文章只能為提供參考,不一定能成為您想要的結果。以下是java中LinkedBlockingQueue與ArrayBlockingQueue的異同正文


雷同:

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類型來統計元素

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved