當前位置:編程學習大全網 - 網站源碼 - LinkedBlockingQueue和ArrayBlockingQueue的異同

LinkedBlockingQueue和ArrayBlockingQueue的異同

分析測試ArrayBlockingQueue和LinkedBlockingQueue的區別,得出結論如下:

隊列中鎖的實現不同

ArrayBlockingQueue實現的隊列中的鎖是沒有分離的,即生產和消費用的是同壹個鎖;

LinkedBlockingQueue實現的隊列中的鎖是分離的,即生產用的是putLock,消費是takeLock

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

ArrayBlockingQueue實現的隊列中在生產和消費的時候,是直接將枚舉對象插入或移除的;

LinkedBlockingQueue實現的隊列中在生產和消費的時候,需要把枚舉對象轉換為Node<E>進行插入或移除,會影響性能

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

ArrayBlockingQueue實現的隊列中必須指定隊列的大小;

LinkedBlockingQueue實現的隊列中可以不指定隊列的大小,但是默認是Integer.MAX_VALUE

註意:

在使用LinkedBlockingQueue時,若用默認大小且當生產速度大於消費速度時候,有可能會內存溢出

2. 在使用ArrayBlockingQueue和LinkedBlockingQueue分別對個簡單字符做入隊操作時,

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

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

  • 上一篇:情趣用品分銷平臺有哪些?和哪個渠道商合作比較靠譜?
  • 下一篇:利用JS給網頁添加雪花飄落的效果
  • copyright 2024編程學習大全網