欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java線程池隊列LinkedBlockingDeque

 更新時間:2022年12月11日 14:07:52   作者:刨紅薯的小羊竿爾  
這篇文章主要為大家介紹了Java線程池隊列LinkedBlockingDeque示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

public enum QueueTypeEnum {
    ARRAY_BLOCKING_QUEUE(1, "ArrayBlockingQueue"),
    LINKED_BLOCKING_QUEUE(2, "LinkedBlockingQueue"),
    DELAY_QUEUE(3, "DelayQueue"),
    PRIORITY_BLOCKING_QUEUE(4, "PriorityBlockingQueue"),
    SYNCHRONOUS_QUEUE(5, "SynchronousQueue"),
    LINKED_TRANSFER_QUEUE(6, "LinkedTransferQueue"),
    LINKED_BLOCKING_DEQUE(7, "LinkedBlockingDeque"),
    VARIABLE_LINKED_BLOCKING_QUEUE(8, "VariableLinkedBlockingQueue"),
    MEMORY_SAFE_LINKED_BLOCKING_QUEUE(9, "MemorySafeLinkedBlockingQueue");
}

LinkedBlockingDeque

LinkedBlockingDeque: 使用雙向隊列實現(xiàn)的有界雙端阻塞隊列。雙端意味著可以像普通隊列一樣 FIFO(先進先出),也可以像棧一樣 FILO(先進后出)。

LinkedBlockingDeque是一個基于鏈表的雙端阻塞隊列,和LinkedBlockingQueue類似,區(qū)別在于該類實現(xiàn)了Deque接口,而LinkedBlockingQueue實現(xiàn)了Queue接口。

LinkedBlockingDeque是一個可選容量的阻塞隊列,如果沒有設置容量,那么容量將是Int的最大值。

LinkedBlockingDeque的重要字段有如下幾個:

//隊列的頭節(jié)點
transient Node<E> first;
//隊列的尾節(jié)點
transient Node<E> last;
//隊列中元素的個數
private transient int count;
//隊列中元素的最大個數
private final int capacity;
//鎖
final ReentrantLock lock = new ReentrantLock();
//隊列為空時,阻塞take線程的條件隊列
private final Condition notEmpty = lock.newCondition();
//隊列滿時,阻塞put線程的條件隊列
private final Condition notFull = lock.newCondition();

從上面的字段,可以看到LinkedBlockingDeque內部只有一把鎖以及該鎖上關聯(lián)的兩個條件,所以可以推斷同一時刻只有一個線程可以在隊頭或者隊尾執(zhí)行入隊或出隊操作。可以發(fā)現(xiàn)這點和LinkedBlockingQueue不同,LinkedBlockingQueue可以同時有兩個線程在兩端執(zhí)行操作。

由于LinkedBlockingDeque是一個雙端隊列,所以就可以在隊頭執(zhí)行入隊和出隊操作,也可以在隊尾執(zhí)行入隊和出隊操作。

public LinkedBlockingDeque() {
    this(Integer.MAX_VALUE);
}
public LinkedBlockingDeque(int capacity) {
    if (capacity <= 0) throw new IllegalArgumentException();
    this.capacity = capacity;
}
public LinkedBlockingDeque(Collection<? extends E> c) {
    this(Integer.MAX_VALUE);
    final ReentrantLock lock = this.lock;
    lock.lock(); // Never contended, but necessary for visibility
    try {
        for (E e : c) {
            if (e == null)
                throw new NullPointerException();
            if (!linkLast(new Node<E>(e)))
                throw new IllegalStateException("Deque full");
        }
    } finally {
        lock.unlock();
    }
}

LinkedBlockingDeque和LinkedBlockingQueue的區(qū)別

LinkedBlockingDeque和LinkedBlockingQueue的相同點在于:

  • 基于鏈表
  • 容量可選,不設置的話,就是Int的最大值

LinkedBlockingDeque和LinkedBlockingQueue的不同點在于:

  • 雙端鏈表和單鏈表
  • 不存在哨兵節(jié)點
  • 一把鎖+兩個條件

以上就是Java線程池隊列LinkedBlockingDeque的詳細內容,更多關于Java線程池隊列的資料請關注腳本之家其它相關文章!

相關文章

  • MyEclipse 2016 CI 4新增BootStrap模板

    MyEclipse 2016 CI 4新增BootStrap模板

    MyEclipse2016是一款全球使用最為廣泛的企業(yè)級開發(fā)環(huán)境程序,這篇文章主要介紹了MyEclipse 2016 CI 4新增BootStrap模板的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Spring循環(huán)依賴產生與解決

    Spring循環(huán)依賴產生與解決

    Spring的解決循環(huán)依賴是有前置條件的,要解決循環(huán)依賴我們首先要了解Spring Bean對象的創(chuàng)建過程和依賴注入的方式。依賴注入方式,我之前的博客有所分享,大家可以在看本篇文章之前進行一下小小的回顧
    2022-12-12
  • Spring底層事務原理解析

    Spring底層事務原理解析

    Spring事務有可能會提交,回滾、掛起、恢復,所以Spring事務提供了一種機制,可以讓程序員來監(jiān)聽當前Spring事務所處于的狀態(tài),這篇文章主要介紹了Spring底層事務原理,需要的朋友可以參考下
    2022-12-12
  • 使用springmvc臨時不使用視圖解析器的自動添加前后綴

    使用springmvc臨時不使用視圖解析器的自動添加前后綴

    這篇文章主要介紹了使用springmvc臨時不使用視圖解析器的自動添加前后綴,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java與Node.js利用AES加密解密出相同結果的方法示例

    Java與Node.js利用AES加密解密出相同結果的方法示例

    這篇文章主要介紹了Java與Node.js利用AES加密解密出相同結果的方法,文中給出了詳細的示例代碼,相信對大家的學習或者工作能帶來一定的幫助,需要的朋友們下面來一起看看吧。
    2017-02-02
  • Kotlin + Spring Boot 請求參數驗證的代碼實例

    Kotlin + Spring Boot 請求參數驗證的代碼實例

    本篇文章主要介紹了Kotlin + Spring Boot 請求參數驗證的代碼實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java進階:Struts多模塊的技巧

    Java進階:Struts多模塊的技巧

    Java進階:Struts多模塊的技巧...
    2006-12-12
  • springboot項目中idea的pom.xml文件的引用標簽全部爆紅問題解決

    springboot項目中idea的pom.xml文件的引用標簽全部爆紅問題解決

    這篇文章主要介紹了springboot項目中idea的pom.xml文件的引用標簽全部爆紅問題解決,本文通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友參考下吧
    2023-12-12
  • 關于java String中intern的深入講解

    關于java String中intern的深入講解

    這篇文章主要給大家介紹了關于java String中intern的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • 基于@AliasFor注解的用法及說明

    基于@AliasFor注解的用法及說明

    這篇文章主要介紹了基于@AliasFor注解的用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論