說到佇列,第一反應就是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 ...