併發queue的簡單介紹(一)

2021-08-04 23:01:53 字數 1885 閱讀 9173

concurrentlinkedqueue高效能的佇列它是不阻塞的,blockingqueue是阻塞的佇列

concurrentlinkedqueue適合在高併發場景下的佇列,通過無鎖的方式 實現了高併發狀態下的

高效能.通常情況下效能要優於blockingqueue.它是基於鏈結點的無界的安全佇列.該佇列的元素

遵循先進先出的原則.該佇列不允許null元素.

小案例:

public static void main(string args)

blockingqueue的實現類

/** blockingqueue的實現類

* * arrayblockingqueue 基於陣列的阻塞佇列,在arrayblockingqueue維護一定長度的陣列

* 以便快取佇列中的資料物件,其內部沒有實現讀寫分離,也就意味著生產和消費不能完全並行,

* 長度是固定的 也叫有界佇列

* * linkedblockingqueue 基於鍊錶的阻塞佇列,同arrayblockingqueue類似,其內部也維持著乙個

* 資料緩衝佇列(該佇列由乙個鍊錶構成),linkedblockingqueue之所以能夠高效處理併發資料,

* 是因為內部採用分離鎖(讀寫分離兩個鎖),從而實現生產者和消費者完全分離,他是乙個無界佇列

* * synchronousqueue 一種沒有緩衝的佇列,生產者的資料直接被消費者獲取並消費

* * 

* */

arrayblockingqueuearray = new arrayblockingqueue<>(5);

array.put("a");

array.put("b");

array.add("c");

array.add("d");

array.add("e");

system.out.println(array.offer("a", 5, timeunit.seconds));

//阻塞佇列

linkedblockingqueueq = new linkedblockingqueue<>();

q.offer("a");

q.offer("b");

q.offer("c");

q.offer("d");

q.offer("e");

q.offer("f");

listlist = new arraylist();

system.out.println(q.drainto(list,3));

system.out.println(list.size());

for(string string:list)

listlist = new arraylist();

system.out.println(q.drainto(list,3));

system.out.println(list.size());

for(string string :list)

synchronousqueue沒有任何容量 

正確案例

finalsynchronousqueueq =newsynchronousqueue<>();

thread t1 =newthread(newrunnable()catch(interruptedexception e)

}});

t1.start();

thread t2 =newthread(newrunnable()

});t2.start();

}

併發queue的簡單介紹(二)

priorityblockingqueue基於優先順序的阻塞佇列 優先順序的判斷通過建構函式傳入的compator物件來決定,也就是傳入的物件必須實現comparable介面 在實現priorityblockingqueue時,內部執行緒同步鎖採用的是公平鎖,他也是個無界的對列。測試 public ...

併發的介紹

為什麼要學習執行緒,因為我們可以把複雜 非同步的 轉化為更簡單 更直觀的 從而簡化複雜系統的開發。多程序 多執行緒發展優勢 執行緒的風險 返回序列的方法 public class unsafesequence 封裝執行緒 public class unsafesequencerunnable imp...

Queue實現秒殺的場景介紹

電商的秒殺和搶購,對程式設計師來說,都不是乙個陌生的東西。然而,從技術的角度來說,這對於web系統是乙個巨大的考驗。當乙個web系統,在一秒鐘內收到數以萬計甚至更多請求時,系統的優化和穩定至關重要。我們直接將請求放入佇列queue中的,採用fifo firstinput first output,先...