阻塞佇列之DelayQueue

2021-09-12 01:27:28 字數 983 閱讀 4714

特點

1、內部佇列基於priorityqueue,其要求放入的元素不能為null

2、放置在內的物件,只有滿足條件:到期 且 排在佇列出口的 才能取出

3、放置在內的物件必須實現delayed介面,該介面有個getdelay方法,用於判斷是否到達執行時間

示例**

/**

* delayqueue 可以延時取出的佇列

* 注意:

* 內部元素必須實現介面: delayed,要注意方法:compareto、getdelay

*/public class delayqueuetest

class task implements delayed

public void settaskid(string taskid)

public task(string taskid, long excutetime)

// 因為:delayed繼承comparable,所以必須實現的方法

// 注意:這個方法影響元素在佇列內的順序,所以,正常來說是要按照延時時間長短來判斷,

// 延時短的要放在前面(方便出隊),延時久的要放在後面

// 如果把延時時間短的放在了延時時間久的後面,那麼即使時間到了,也無法取出,要等前面元素先出

public int compareto(delayed o) else if (result < 0) else

} // 返回是否已經到達出隊時間

// <=0時間到達可以取出,否則未到無法取出

public long getdelay(timeunit unit)

} private void test() catch (interruptedexception e)

} }public static void main(string args)

}

JUC阻塞佇列之DelayQueue原始碼分析

delayqueue是乙個支援延時獲取元素的無界阻塞佇列。並且佇列中的元素必須實現delayed介面。在建立元素時可以指定多久才能從佇列中獲取當前元素。只有在延遲期滿時才能從佇列中獲取到元素。delayqueue的應用範圍非常廣闊,如可以用它來儲存快取中元素的有效期,也可用它來實現定時任務。在分析d...

阻塞queue系列之DelayQueue

delayqueue是乙個無界阻塞佇列,只有在延遲期滿時才能從中提取元素。該佇列的頭部是延遲期滿後儲存時間最長的delayed 元素。底層也是通過陣列實現,所以讀寫操作使用的是同一把鎖,其插入的元素必須實現delayed介面。public delayqueue public delayqueue c...

DelayQueue 實現延時佇列

延遲佇列不需要不停的掃瞄快取 任務 輪訓等,它能夠實現在準確的時間點去執行任務。public class delaytask implements delayed public taskbase getdata public long getexpire override public long g...