介绍
这篇文章将为大家详细讲解有关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项目中使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。