DelayQueue怎么在java项目中使用

  介绍

这篇文章将为大家详细讲解有关DelayQueue怎么在java项目中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1。概念

DelayQueue是一个带有延迟时间的无界阻塞队列。队列中的元素,只有等延时时间到了,才能取出来。此队列一般用于过期数据的删除,或任务调度。以下,模拟一下定长时间的数据删除。

2。特点

(1)无边界设计

(2)添加(放)不阻塞,移除阻塞

(3)元素都有一个过期时间

(4)取元素只有过期的才会被取出

3。实例

每个需要放入DelayQueue队列元素需要实现推迟接口、下面我们创建DelayObject类,其实例对象将被放入DelayQueue中。其构造函数包括字符串类型数据及延迟毫秒变量。

public  class  DelayObject  implements  Delayed  {   private 才能;String 数据;   private 才能long 开始时间;   public 才能DelayObject (String 数据,long  delayInMilliseconds), {   ,,,this.data =,数据;   ,,,this.startTime =, System.currentTimeMillis (), +, delayInMilliseconds;   }

DelayQueue的应用实例

package  org.dromara.hmily.demo.springcloud.account.service;   ,   import  java.time.LocalDateTime;   import  java.time.format.DateTimeFormatter;   import  java.util.concurrent.DelayQueue;   import  java.util.concurrent.Delayed;   import  java.util.concurrent.TimeUnit;   ,/* *   ,* @description:延时队列测试   ,* @author: hh   ,*/public  class  DelayedQueneTest  {   ,   public 才能;static  void  main (String [], args), throws  InterruptedException  {   ,,,Item  item1 =, new 项目(“item1",, 5日,TimeUnit.SECONDS);   ,,,Item  item2 =, new 项目(“item2" 10, TimeUnit.SECONDS);   ,,,Item  item3 =, new 项目(“item3" 15, TimeUnit.SECONDS);   ,,,DelayQueue, queue =, new  DelayQueue<在();   ,,,queue.put (item1);   ,,,queue.put(第二条);   ,,,queue.put (item3);   ,,,System.out.println (“begin 时间:“,+,LocalDateTime.now () .format (DateTimeFormatter.ISO_LOCAL_DATE_TIME));   ,,,for  (int 小姐:=,0;,小姐:& lt;, 3;,我+ +),{   ,,,,,Item  take =, queue.take ();   ,,,,,System.out.format(“名字:{% s},,时间:{% s} \ n", take.name,, LocalDateTime.now () .format (DateTimeFormatter.ISO_DATE_TIME));   ,,,}   ,,}   ,   }   ,   class  Item  implements 延迟{/*,才能触发时间*/private 才能;long 时间;   String 才能,名字;   ,   public 才能;项目(名称、String  long ,, TimeUnit 单元),{   ,,,this.name =,名称;   ,,,this.time =, System.currentTimeMillis (), +, (time 祝辞,0 ?,unit.toMillis(时间):,0);   ,,}   ,   @Override才能   public 才能;long  getDelay (TimeUnit 单元),{   ,,,return  time 作用;System.currentTimeMillis ();   ,,}   ,   @Override才能   public 才能;int  compareTo (Delayed  o), {   ,,,Item  Item =,(项),o;   ,,,long  diff =, this.time 作用;item.time;   ,,,if  (diff  & lt;=, 0),{//,改成祝辞=会造成问题   ,,,,,return  1;   ,,,}else  {   ,,,,,return  1;   ,,,}   ,,}   ,   @Override才能   public 才能;String  toString (), {   ,,,return “项{“+   ,,,,,,,,时间=?+,time  +   ,,,,,,,,,,的名字=& # 39;“,+,name  +, & # 39; \ & # 39; & # 39; +   ,,,,,,,& # 39;}& # 39;;   ,,}   }

运行结果:每5秒取出一个

begin 时间:2019 - 05 - 31 - t11:58:24.445   名称:{item1},,时间:{2019 - 05 - 31 t11:58:29.262}   名称:{第二条},,时间:{2019 - 05 - 31 t11:58:34.262}   名称:{item3},,时间:{2019 - 05 - 31 t11:58:39.262}

关于DelayQueue怎么在java项目中使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

DelayQueue怎么在java项目中使用