最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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;
//隊列中元素的個數(shù)
private transient int count;
//隊列中元素的最大個數(shù)
private final int capacity;
//鎖
final ReentrantLock lock = new ReentrantLock();
//隊列為空時,阻塞take線程的條件隊列
private final Condition notEmpty = lock.newCondition();
//隊列滿時,阻塞put線程的條件隊列
private final Condition notFull = lock.newCondition();

從上面的字段,可以看到LinkedBlockingDeque內(nèi)部只有一把鎖以及該鎖上關聯(lián)的兩個條件,所以可以推斷同一時刻只有一個線程可以在隊頭或者隊尾執(zhí)行入隊或出隊操作??梢园l(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的詳細內(nèi)容,更多關于Java線程池隊列的資料請關注腳本之家其它相關文章!

相關文章

  • Java吃貨聯(lián)盟訂餐系統(tǒng)代碼實例

    Java吃貨聯(lián)盟訂餐系統(tǒng)代碼實例

    這篇文章主要介紹了Java訂餐系統(tǒng),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Springboot靜態(tài)資源訪問實現(xiàn)代碼解析

    Springboot靜態(tài)資源訪問實現(xiàn)代碼解析

    這篇文章主要介紹了Springboot靜態(tài)資源訪問實現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Netty粘包拆包問題解決方案

    Netty粘包拆包問題解決方案

    這篇文章主要介紹了Netty粘包拆包問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Java實現(xiàn)讀取TXT和CSV文件內(nèi)容

    Java實現(xiàn)讀取TXT和CSV文件內(nèi)容

    這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)讀取TXT和CSV文件內(nèi)容的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-02-02
  • springboot+mybatis配置控制臺打印sql日志的方法

    springboot+mybatis配置控制臺打印sql日志的方法

    這篇文章主要介紹了springboot+mybatis配置控制臺打印sql日志的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 基于jdk動態(tài)代理和cglib動態(tài)代理實現(xiàn)及區(qū)別說明

    基于jdk動態(tài)代理和cglib動態(tài)代理實現(xiàn)及區(qū)別說明

    這篇文章主要介紹了基于jdk動態(tài)代理和cglib動態(tài)代理實現(xiàn)及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • java根據(jù)圖片中綠色像素點的多少進行排序

    java根據(jù)圖片中綠色像素點的多少進行排序

    這篇文章主要介紹了java根據(jù)圖片中綠色像素點的多少進行排序,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • SpringBoot文件上傳控制及Java 獲取和判斷文件頭信息

    SpringBoot文件上傳控制及Java 獲取和判斷文件頭信息

    這篇文章主要介紹了SpringBoot文件上傳控制的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-12-12
  • java如何獲取request中json數(shù)據(jù)

    java如何獲取request中json數(shù)據(jù)

    這篇文章主要給大家介紹了關于java如何獲取request中json數(shù)據(jù)的相關資料,文中通過代碼示例以及圖文將獲取的方法介紹的非常詳細,對大家學習或者使用java具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • MyBatisCodeHelperPro最新激活方法(有效方法)

    MyBatisCodeHelperPro最新激活方法(有效方法)

    這篇文章主要介紹了MyBatisCodeHelperPro最新激活方法親測有效,非常好用,小編今天以idea2021.2.1為例給大家詳細講解,需要的朋友可以參考下
    2022-08-08

最新評論

闸北区| 宁陕县| 卢氏县| 内乡县| 太仆寺旗| 和硕县| 亚东县| 茂名市| 武山县| 商河县| 日土县| 民和| 阿尔山市| 宁都县| 荥阳市| 商南县| 昌都县| 阿克| 社会| 丘北县| 贵州省| 桐梓县| 连平县| 德兴市| 隆昌县| 平舆县| 霞浦县| 康保县| 龙州县| 阳信县| 象山县| 汉源县| 兴城市| 花莲县| 新余市| 贵南县| 大新县| 吴江市| 张家界市| 磴口县| 扶沟县|