溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行LinkedBlockingQueue的put操作

發布時間:2021-12-23 17:09:07 來源:億速云 閱讀:110 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關如何進行LinkedBlockingQueue的put操作,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

JDK提供了7大阻塞隊列,常用于實現生產者和消費者,LinkedBlockingQueue是最常用之一.

public void put(E e) throws InterruptedException {    if (e == null) throw new NullPointerException();    int c = -1;    Node<E> node = new Node<E>(e);    final ReentrantLock putLock = this.putLock;    final AtomicInteger count = this.count;    // 可中斷的獲取鎖操作,即線程由于未獲取到鎖而處于Blocked狀態時,線程可以被中斷而不再繼續等待.    putLock.lockInterruptibly();    try {        // 如果隊列中元素數量和隊列容量相等,即此時隊列已經滿了,則當前線程需要等待.        // 之所以使用while循環,是當線程被喚醒之后,依然需要判斷隊列是否滿.        // 即只有隊列不滿的情況下,當前線程才可以添加元素                while (count.get() == capacity) {            notFull.await();        }        // 入隊,即添加元素        enqueue(node);        c = count.getAndIncrement();        if (c + 1 < capacity)            // 通知其他生產者            notFull.signal();    } finally {        putLock.unlock();    }    if (c == 0)        // 通知消費者        signalNotEmpty();}

總結一下添加操作流程

1.獲取putLock鎖2.如果隊列已滿, 則等待(notFull.await())3.元素入隊4.當前生產者添加元素之后如果隊列還沒有滿, 則通知其他生產者添加元素(notFull.signal())5.釋放putLock鎖6.如果隊列中已經有元素,則通知消費者

首先是獲取鎖,拿到鎖之后,如果隊列滿了則等待,如果隊列不滿則添加元素,

添加元素之后,如果隊列還沒有滿,則通知其他生產者

添加元素之后,如果隊列已經有元素了,則通知消費者

關于如何進行LinkedBlockingQueue的put操作就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女