怎麼理解無界佇列和有界佇列

2021-08-30 15:27:05 字數 790 閱讀 2633

有界佇列:就是有固定大小的佇列。比如設定了固定大小的 linkedblockingqueue,又或者大小為 0,只是在生產者和消費者中做中轉用的 synchronousqueue。

無界佇列:指的是沒有設定固定大小的佇列。這些佇列的特點是可以直接入列,直到溢位。當然現實幾乎不會有到這麼大的容量(超過 integer.max_value),所以從使用者的體驗上,就相當於 「無界」。比如沒有設定固定大小的 linkedblockingqueue。

所以無界佇列的特點就是可以一直入列,不存在佇列滿負荷的現象。這個特性,在我們自定義執行緒池的使用中非常容易出錯。而出錯的根本原因是對執行緒池內部原理的不了解。
比如有這麼乙個案例,我們使用了無界佇列建立了這樣乙個執行緒池:

executorservice executor =  new threadpoolexecutor(2, 4, 60l, timeunit.seconds, new linkedblockingqueue());
配置的引數如下:

核心執行緒數 2

最大執行緒數 4

空閒執行緒保活時間 60s

使用無界佇列 linkedblockingqueue

*ps:我們這裡的佇列都指執行緒池使用的阻塞佇列 blockingqueue 的實現,使用的最多的應該是linkedblockingqueue,注意一般情況下要配置一下佇列大小,設定成有界佇列,否則jvm記憶體會被撐爆!

迴圈佇列和佇列

描述 根據給定的空間構造順序迴圈佇列,規定隊滿處理方法為少用乙個元素空間。例如,給定5個元素空間構造迴圈佇列,則只能存放4個元素。試根據入隊及出隊操作判斷佇列最後的元素存放情況,並輸出最後佇列中的元素值,即完成給定入隊及出列操作後一次性全部出隊的元素值。要求採用順序佇列完成。輸入 輸入的第一行為乙個...

佇列和迴圈佇列

線性表是最基本,最簡單,最常用的一種資料結構。線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其他資料元素均有唯一的前驅元素和後繼元素。線性表的特徵如下 集合中一定存在唯一的乙個 第乙個元素 集合中一定存在唯一的乙個 最後元素 除最後乙個元素外,其他元素均有唯一的後繼元...

佇列和優先佇列

佇列是一種先進先出的資料結構 可以定義乙個結構體,表示乙個佇列。struct queue 另外c 中有stl標準模板庫 封裝了queue類 標頭檔案 include queue queue int vis vis.pop 刪除隊首元素 vis.back 返回隊尾元素 vis.front 返回隊首元素...