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