DelayQueue基本簡介

2021-09-30 20:25:11 字數 952 閱讀 2223

delayqueue是乙個無界阻塞佇列,只有在延遲期滿時才能從中提取元素。該佇列的頭部是延遲期滿後儲存時間最長的delayed 元素。

delayqueue是乙個用來延時處理的佇列,所謂延時處理就是說可以為佇列中元素設定乙個過期時間,相關的操作受到這個設定時間的控制。

關閉空閒連線。伺服器中,有很多客戶端的連線,空閒一段時間之後需要關閉之。

快取。快取中的物件,超過了空閒時間,需要從快取中移出。

任務超時處理。在網路協議滑動視窗請求應答式互動時,處理超時未響應的請求。

如果不使用delayqueue,那麼常規的解決辦法就是:使用乙個後台執行緒,遍歷所有物件,挨個檢查。這種笨笨的辦法簡單好用,但是物件數量過多時,可能存在效能問題,檢查間隔時間不好設定,間隔時間過大,影響精確度,過小則存在效率問題。而且做不到按超時的時間順序處理。

delayqueue = blockingqueue +priorityqueue + delayed

基本定義如下

public inte***ce comparable

public inte***ce delayed extends comparable

public class delayqueueimplements blockingqueue

delayqueue內部的實現使用了乙個優先佇列。當呼叫delayqueue的offer方法時,把delayed物件加入到優先佇列q中。如下:
public boolean offer(e e)  finally 

}

delayqueue的take方法,把優先佇列q的first拿出來(peek),如果沒有達到延時閥值,則進行await處理。如下:
public e take() throws interruptedexception  else  else }}

} finally

}

DelayQueue原理分析

delayqueue是乙個無界阻塞佇列,只有在延遲期滿時才能從中提取元素。該佇列的頭部是延遲期滿後儲存時間最長的delayed 元素。delayqueue是乙個用來延時處理的佇列,所謂延時處理就是說可以為佇列中元素設定乙個過期時間,相關的操作受到這個設定時間的控制。a 關閉空閒連線。伺服器中,有很多...

DelayQueue實現延遲訊息

最近想做乙個定時推送訊息的功能,經過調研了解到delayqueue,訊息物件需實現delayed介面裡的getdelay timeunit unit 方法,由於delayed繼承了comparable故需要實現compareto方法,可用於決定訊息的推送次序。以考試為例,設定每個考生的交卷時間點。學...

阻塞佇列之DelayQueue

特點 1 內部佇列基於priorityqueue,其要求放入的元素不能為null 2 放置在內的物件,只有滿足條件 到期 且 排在佇列出口的 才能取出 3 放置在內的物件必須實現delayed介面,該介面有個getdelay方法,用於判斷是否到達執行時間 示例 delayqueue 可以延時取出的佇...