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,先...