DelayQueue实现延迟队列
2024-09-05 10:11:21
public class Q {
public static void main(String[] args) throws Exception {
DelayQueue<Order> orders = new DelayQueue<>();
Order order1 = new Order(1000, "1x");
Order order2 = new Order(2000, "2x");
Order order3 = new Order(3000, "3x");
Order order4 = new Order(4000, "4x");
orders.add(order1);
orders.add(order2);
orders.add(order3);
orders.add(order4);
for (; ; ) {
//没有到期会阻塞
Order take = orders.take();
System.out.println(take);
}
}
}
class Order implements Delayed {
@Override
public String toString() {
return "DelayedElement{" + "delay=" + delayTime +
", expire=" + expire +
", data='" + data + '\'' +
'}';
}
Order(long delay, String data) {
delayTime = delay;
this.data = data;
expire = System.currentTimeMillis() + delay;
}
private final long delayTime; //延迟时间
private final long expire; //到期时间
private String data; //数据
/**
* 剩余时间=到期时间-当前时间
*/
@Override
public long getDelay(TimeUnit unit) {
return unit.convert(this.expire - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
}
/**
* 优先队列里面优先级规则
*/
@Override
public int compareTo(Delayed o) {
return (int) (this.getDelay(TimeUnit.MILLISECONDS) - o.getDelay(TimeUnit.MILLISECONDS));
}
}
最新文章
- Java消息队列--JMS概述
- Eclipse集成Tomcat的配置步骤实例
- 【Android Studio使用教程6】Execution failed for task &#39;:&#215;&#215;&#215;:compileReleaseAidl&#39;
- Discuz! x 2.5-3.0 beta 存储型跨站漏洞
- linux crontab设置
- ubuntu 下 apache+tomcat整合_(mod-jk方法)[转]
- ubuntu下编译内核驱动。
- BZOJ_4176_Lucas的数论_杜教筛+莫比乌斯反演
- LVM 移除PV步骤
- 在docker上部署mysql
- Pandas模块
- mysql 关于数据库和数据表的基本操作
- Linux 查看内存状态
- js 检测变量是否存在
- SpringBoot普通类中如何获取其他bean例如Service、Dao(转)
- 03-body标签中相关标签-2
- Linux Shell 内建命令:冒号(:)
- java异常及日志注意事项
- 【原】[UIImage imageWithContentsOfFile:]引发的图片无法显示的问题
- PAT 1074. Reversing Linked List