日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

LinkedBlockingQueue與ArrayBlockingQueue對比

作者:稻草人ZZ 更新時間: 2023-07-04 編程語言
  • 隊列大小不同

    ArrayBlockingQueue是有界的初始化必須指定大小,而LinkedBlockingQueue可以是有界的也可以是無界的(Integer.MAX_VALUE)。

    對于LinkedBlockingQueue而言,當添加速度大于移除速度時,在無界的情況下,可能會造成內存溢出等問題。

  • 數據存儲容器不同

    ArrayBlockingQueue采用的是數組作為數據存儲容器,而LinkedBlockingQueue采用的則是以Node節點作為連接對象的鏈表。

    由于ArrayBlockingQueue采用的是數組的存儲容器,因此在插入或刪除元素時不會產生或銷毀任何額外的對象實例,而LinkedBlockingQueue則會生成一個額外的Node對象。這可能在長時間內需要高效并發地處理大批量數據的時,對于GC可能存在較大影響。

  • 兩者的實現隊列添加或移除的鎖不一樣

    LinkedBlockingQueue內部由兩個ReentrantLock來實現出入隊列的線程安全,進行了鎖分離,其添加采用的是putLock,移除采用的則是takeLock,這樣能大大提高隊列的吞吐量,也意味著在高并發的情況下生產者和消費者可以并行地操作隊列中的數據,以此來提高整個隊列的并發性能。由兩個各自Condition對象的await和signal來實現等待和喚醒功能。

    ArrayBlockingQueue內部由一個ReentrantLock來實現出入隊列的線程安全,實現的隊列中的鎖是沒有分離的,即添加操作和移除操作采用的同一個ReenterLock鎖。由兩個Condition對象的await和signal來實現等待和喚醒功能。

原文鏈接:https://blog.csdn.net/qq_41139119/article/details/131367672

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新