溫馨提示×

溫馨提示×

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

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

ArrayBlockingQueue怎么在java中使用

發(fā)布時間:2021-04-21 17:17:59 來源:億速云 閱讀:128 作者:Leah 欄目:編程語言

ArrayBlockingQueue怎么在java中使用?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習下,希望你能有所收獲。

Java是什么

Java是一門面向?qū)ο缶幊陶Z言,可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序。

1.入隊流程

構(gòu)造一個長度為 6 的環(huán)形數(shù)組:

(1)剛剛開始構(gòu)造完畢時,插入索引和取出索引都在同一個位置,數(shù)組內(nèi)值為空

(2)將元素 A 進行入隊操作。元素 A 入隊后,取出值的索引不會變化,但是入隊索引會偏移到下一個位置

(3)繼續(xù)進行入隊操作,直到 putIndex 索引指向最后一個位置

(4)將元素 F 進行入隊,我們會看到,putIndex 索引和 takeIndex 索引,又到回了初始時的位置,這就是上面說的環(huán)形隊列,此時如果再有線程進行入隊操作時,線程便會堵塞,直到元素被消費。

2.入隊方法

入隊有四個方法,它們分別是add、offer、put、offer,就其中兩種帶來介紹。

(1)add 方法

//添加元素到隊尾
public boolean add(E e) {
        //調(diào)用父類的方法
        return super.add(e);
    }
//父類的添加方法
 public boolean add(E e) {
        //實質(zhì)是調(diào)用offer方法
        if (offer(e))
            return true;
        else
            throw new IllegalStateException("Queue full");
    }

(2)put 方法

//添加制定元素到隊尾,如果隊列滿了一直等待隊列有元素出隊
public void put(E e) throws InterruptedException {
        checkNotNull(e);
        //上鎖
        final ReentrantLock lock = this.lock;
        lock.lockInterruptibly();
        try {
            while (count == items.length)
                //while循環(huán),如果隊列滿了一直等待
                notFull.await();
            //隊列還有空間,調(diào)用enqueue方法入隊
            enqueue(e);
        } finally {
            //釋放鎖資源
            lock.unlock();
        }
}

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

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

AI