阻塞佇列之ArrayBlockingQueue

2021-07-15 12:48:55 字數 1404 閱讀 9154

當使用阻塞佇列的時候,它可能會對當前執行緒產生阻塞,,比如乙個執行緒從乙個空的阻塞佇列中取元素,此時執行緒會被阻塞直到阻塞佇列中有了元素。當佇列中有元素後,被阻塞的執行緒會自動被喚醒。

arrayblockingqueue是使用陣列作為底層儲存的。

/** 陣列儲存  */

private

final e items;

/** 隊尾下標 */

private

int takeindex;

/** 佇列頭下標 */

private

int putindex;

/** 陣列的長度 */

private

int count;

offer()方法,將元素插入到佇列,如果佇列滿了就返回false

public

boolean

offer(e e)

} finally

}

put()方法,將指定的元素插入此佇列的尾部,如果該佇列已滿,則等待可用的空間。

public

void

put(e e) throws interruptedexception catch (interruptedexception ie)

insert(e);

} finally

}

poll()方法,獲取並移除此佇列的頭,如果此隊列為空,則返回 null。

public e poll()  finally 

}

take()方法,獲取並移除此佇列的頭部,在元素變得可用之前一直等待。

public e take() throws interruptedexception  catch (interruptedexception ie) 

e x = extract();

return x;

} finally

}

public

class

blockqueuetest

class

consumer

extends

thread

private

void consume() catch (interruptedexception e) }}

}class

producer

extends

thread

private

void produce() catch (interruptedexception e) }}

}}

阻塞佇列之SynchronousQueue

synchronousqueue是一種無緩衝的等待佇列,類似於無中介的直接交易,有點像原始社會中的生產者和消費者,生產者拿著產品去集市銷售給產品的最終消費者,而消費者必須親自去集市找到所要商品的直接生產者,如果一方沒有找到合適的目標,那麼對不起,大家都在集市等待。相對於有緩衝的blockingque...

阻塞佇列之DelayQueue

特點 1 內部佇列基於priorityqueue,其要求放入的元素不能為null 2 放置在內的物件,只有滿足條件 到期 且 排在佇列出口的 才能取出 3 放置在內的物件必須實現delayed介面,該介面有個getdelay方法,用於判斷是否到達執行時間 示例 delayqueue 可以延時取出的佇...

等待佇列 阻塞非阻塞

阻塞 裝置驅動不阻塞,使用者想獲取裝置資源只能不停的查詢,這無謂的消耗cpu資源。而阻塞訪問,不能獲取資源的程序將進入休眠,它將cpu資源 禮讓 給其他程序 喚醒程序的地方最大可能發生在中斷裡面,因為硬體資源獲得的同時往往伴隨著乙個中斷 定義頭 wait queue head t queue 初始化...