博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中延时队列实例
阅读量:5170 次
发布时间:2019-06-13

本文共 2819 字,大约阅读时间需要 9 分钟。

package com.example.demo;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.concurrent.DelayQueue;import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;public class DeQueueTest {    public static final Logger logger = LoggerFactory.getLogger(DeQueueTest.class);    public static final int DELAY_PERIOD_SECONDS = 10;    // 延时10秒    private final static DelayQueue
delayQueue = new DelayQueue
(); /** * 以秒为单位计算耗时 */ static class DelayedElement implements Delayed { // 到期时间 public long expireTime; public String name; public DelayedElement(String name){ this.name = name; this.expireTime = (System.currentTimeMillis() / 1000) + DELAY_PERIOD_SECONDS; } @Override public int compareTo(Delayed o) { if(this.expireTime < ((DelayedElement)o).expireTime) return -1; else if(this.expireTime > ((DelayedElement)o).expireTime)return 1; else return 0; } public void reset() { this.expireTime = (System.currentTimeMillis() / 1000) + DELAY_PERIOD_SECONDS; } // 这边返回的值为0了,就表示到期了 @Override public long getDelay(TimeUnit unit) { long r = unit.convert(expireTime - (System.currentTimeMillis() / 1000), TimeUnit.SECONDS); return r; } public String getName() { return name; } } public static void main(String[] args) throws InterruptedException { delayQueue.offer(new DelayedElement("a1")); TimeUnit.SECONDS.sleep(3); delayQueue.offer(new DelayedElement("a2")); TimeUnit.SECONDS.sleep(1); delayQueue.offer(new DelayedElement("a3")); TimeUnit.SECONDS.sleep(2); delayQueue.offer(new DelayedElement("a4")); TimeUnit.SECONDS.sleep(3); delayQueue.offer(new DelayedElement("a5")); while(true) { DelayedElement element = delayQueue.poll(); if (element != null) { logger.warn(element.getName()); // 重新加入 element.reset(); delayQueue.offer(element); } Thread.sleep(100); } }}

按时间循环打印输出部分

09:58:18.033 [main] WARN com.example.demo.DeQueueTest - a109:58:21.098 [main] WARN com.example.demo.DeQueueTest - a209:58:22.082 [main] WARN com.example.demo.DeQueueTest - a309:58:24.042 [main] WARN com.example.demo.DeQueueTest - a409:58:27.086 [main] WARN com.example.demo.DeQueueTest - a509:58:28.062 [main] WARN com.example.demo.DeQueueTest - a109:58:31.024 [main] WARN com.example.demo.DeQueueTest - a209:58:32.005 [main] WARN com.example.demo.DeQueueTest - a309:58:34.089 [main] WARN com.example.demo.DeQueueTest - a4

转载于:https://www.cnblogs.com/vipmint/p/7387986.html

你可能感兴趣的文章
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>
11.28.cookie
查看>>
BeanShell简介
查看>>
python字符串操作
查看>>
不同程序语言的注释和变量要求
查看>>
语言基础(9):static, extern 和 inline
查看>>
ES5_03_Object扩展
查看>>
bzoj 2600: [Ioi2011]ricehub
查看>>
创建数据库,表
查看>>
工厂模式
查看>>
计算机网络基础知识
查看>>
C#里如何遍历枚举所有的项
查看>>
如何在键盘出现时滚动表格,以适应输入框的显示
查看>>
超级强大的鼠标手势工具
查看>>
常用Dockerfile举例
查看>>
jquery的ajax用法
查看>>
设计模式-策略模式(Strategy)
查看>>
django orm 数据查询详解
查看>>
JarvisOJ Basic 熟悉的声音
查看>>