Java中的佇列

2021-09-18 04:01:18 字數 1465 閱讀 7471

queue: 基本上,乙個佇列就是乙個先入先出(fifo)的資料結構

訊息佇列是用來解決這樣的問題的:將突發的大量請求轉換為伺服器能夠處理的佇列請求。eg:在乙個秒殺活動中,伺服器1秒可以處理100條請求。而在秒殺活動開啟時1秒進來1000個請求並且持續10秒。這個時候就需要將這10000個請求放入訊息佇列裡面,後端按照原來的能力處理,用100秒將佇列中的請求處理完畢。這樣就不會導致宕機。

queue介面與list、set同一級別,都是繼承了collection介面。linkedlist實現了deque接 口。

迴圈佇列隊空:隊頭指標在隊尾指標的下一位置時,隊空: q.front == q.rear;

隊滿:(q.rear+1)%maxsize=q.front ,

隊滿:當隊頭和隊尾指標在同一位置時;

佇列長度:(q.rear - q.front + maxsize) % maxsize

synchronousqueue:內部沒有容器的佇列 較特別 --其獨有的執行緒一一配對通訊機制。它的每個插入操作都要等待其他執行緒相應的移除操作,反之亦然。其安全性的保證是由reentrantlock保證的。

linkedtransferqueue:乙個由鍊錶結構組成的無界阻塞佇列。迴圈cas+volatile實現執行緒安全。採用一種預佔模式。意思就是消費者執行緒取元素時,如果佇列不為空,則直接取走資料,若隊列為空,那就生成乙個節點(節點元素為null)入隊,然後消費者執行緒被等待在這個節點上,後面生產者執行緒入隊時發現有乙個元素為null的節點,生產者執行緒就不入隊了,直接就將元素填充到該節點,並喚醒該節點等待的執行緒,被喚醒的消費者執行緒取走元素,從呼叫的方法返回。我們稱這種節點操作為「匹配」方式。

linkedblockingdeque:乙個由鍊錶結構組成的雙向阻塞佇列。使用乙個可重入鎖和這個鎖生成的兩個條件物件進行併發控制(classic two-condition algorithm)。

linkedlist : 實現了deque介面,受限的佇列

priorityqueue : 優先佇列,本質維護乙個有序列表。可自然排序亦可傳遞 comparator建構函式實現自定義排序。

concurrentlinkedqueue:基於鍊錶 執行緒安全的佇列。增加刪除o(1) 查詢o(n)

queue使用時要盡量避免collection的add()和remove()方法,而是要使用offer()來加入元素,使用poll()來獲取並移出元素。它們的優

點是通過返回值可以判斷成功與否,add()和remove()方法在失敗的時候會丟擲異常。 如果要使用前端而不移出該元素,使用element()或者peek()方法。

java中的阻塞佇列

一 阻塞佇列 blockingqueue 是乙個支援兩個附加操作的佇列。這兩個附加的操作支援阻塞的插入和移除方法。1 支援阻塞的插入方法 意思是當佇列滿時,佇列會阻塞插入元素的執行緒,直到佇列不滿。2 支援阻塞的移除方法 意思是在隊列為空時,獲取元素的執行緒會等待佇列變為非空。阻塞佇列常用於生產者和...

java中的鏈式佇列

所謂鏈式佇列就是用節點儲存佇列,對於佇列的特點我們就不過多介紹,不過值得注 意的是,鏈隊不需要預先分配記憶體,也不會出現隊滿。如果我們以鏈頭為隊頭的話 出隊的時間複雜度為o 1 但入隊的複雜度卻是o n 同樣如果以鏈頭為隊尾的話 出隊的時間複雜度為o n 但入隊的時間複雜度是o 1 為了是出隊與入隊...

Java裡的7中阻塞佇列

1.arrayblockingqueue 陣列結構的有界佇列 2.linkedblockingqueue 鍊錶結構的有界佇列 3.priorityblockingqueue 支援優先順序排序的無界佇列 4.delayqueue 用優先順序佇列實現的無界阻塞佇列 指定多久才能從佇列中獲取元素,在快取系...