/**
* DelayQueue 底层包含一个PriorityQueue。
* 向DelayQueue插入的元素必须实现delay接口,DelayQueue是不边界的
* 只有当队列中的元素过期了,即getDalay方法返回值小于0,元素才可以取出来
* 当元素过期了不取出来,不会被删除,元素仍然在队列里
*/
public class DelayQueueTest {
public static void main(String[] args) throws InterruptedException {
DelayQueue<Element<String>> queue = new DelayQueue<Element<String>>();
queue.put(new Element<>("hello1", 3000));
long start = System.currentTimeMillis();
System.out.println("=========");
// TimeUnit.SECONDS.sleep(5); //验证元素过期了不取出来,不会被删除
queue.take();
System.out.println(System.currentTimeMillis()-start);
}
static class Element<E> implements Delayed{
final E e;
long expireTime;
Element (E e , long expireTime){
this.e = e;
this.expireTime = System.currentTimeMillis() + expireTime;
}
@Override
public long getDelay(TimeUnit unit) {
return expireTime - System.currentTimeMillis();
}
@Override
public int compareTo(Delayed o) {
Element that = (Element) o;
if(this.expireTime < that.expireTime){
return -1;
}else if(this.expireTime > that.expireTime){
return 1;
}else{
return 0;
}
}
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 本地部署 DeepSeek:小白也能轻松搞定!
· 我们是如何解决abp身上的几个痛点
· 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)