各種Queue的乙個錦集

2021-08-14 15:33:53 字數 1978 閱讀 6185

說到佇列,第一反應就是mq..- -.mq是一種佇列,市面上也有各種mq,比如rabbit,rocket,active,kafka等.語言千奇百怪,訊息中介軟體技術千奇百怪,但是總是有乙個核心的設計也就是佇列.

concurrentlinkedqueue:

乙個執行緒安全的高效能無界佇列,常用的方法有poll , peek , offer , add.

poll:從佇列的頭部獲取到元素 , 獲取到之後將其移除

peek:從佇列的頭部獲取到元素 , 獲取到之後依舊存在

offer和add在這裡都是新增到佇列尾部,沒有什麼實質區別

如圖:

這裡new了乙個concurrentlinkedqueue,並且新增了4個元素,再來比較一下peek和poll.檢視執行結果可以驗證我的說明.

如圖:

最近身體有點問題..未完待續

fine 終於有時間來補全一下 自從uumq(原來的mq4jj)在github上刪了倉庫之後算是對之前的編碼生涯的一次告別.哀莫大於心死啊.

不管前路如何多艱 江山依然如此多嬌嘛

心情好 來模擬一下阻塞佇列的實現吧.直接上**

public

class

myqueuedemo

/*** 佇列的put方法 存放物件

*@param object 往linkedlist中存放的物件

*/public

void

put(object object) catch (interruptedexception e) }/*

* 沒有到達最大容量時 往list中新增元素 計數器+1

* atomicinteger的getandincrement()是執行緒安全的 ++ 則不安全

*/list.add(object);

count.getandincrement();

system.out.println("元素: " + object + " 加入");

lock.notify();}}

/*** 佇列的take方法 獲取物件

*@return take到的物件

*/public object take() catch (interruptedexception e) }/*

* atomicinteger中的getanddecrement()執行緒安全 -- 則不安全

*/count.getanddecrement();

temp = list.removefirst();

system.out.println("元素:" + temp + " 消費");

lock.notify();

}return temp;

}/**

* 獲取佇列的大小

*@return 佇列計數器當前值

*/public

intsize()

public

static

void

main(string args) throws interruptedexception

system.out.println("當前元素個數: " + queue.size());

thread t1 = new thread(() -> , "thread1");

thread t2 = new thread(() -> catch (interruptedexception e)

} , "thread2");

t1.start();

thread.sleep(1000);

t2.start();

}

是不是十分

使用乙個節點實現環形Queue

用環形鍊錶實現queue。環形表也是一條鍊錶,只是沒有任何節點的鏈結為空,且只要鍊錶非空則last.next的值為first。只能使用乙個node型別的例項變數 last public class recyclequeue public recyclequeue item item void enq...

用兩個棧(Stack)實現乙個佇列(Queue)

兩年前從網上看到一道面試題 用兩個棧 stack 實現乙個佇列 queue 覺得不錯,就經常拿來面試,幾年下來,做此題的應該有幾十人了。通過對面試者的表現和反應,有一些統計和感受,在此做個小結。用c 描述,題目大致是這樣的 已知下面stack類及其3個方法push pop和count,請用2個sta...

latex乙個例項(包含各種包)

mode tex utf 8 documentclass usepackage utf8 usepackage usepackage usepackage usepackage usepackage usepackage usepackage table usepackage usepackage ...