Java高效延时队列实现详解

一、程序概述

本程序实现了一个基于 Java 的延时队列工具,能够按照预设的延迟时间执行任务。该工具以DelayQueue为核心数据结构,支持多线程并发处理任务,同时具备任务容量控制功能,可广泛应用于需要定时执行任务的场景,如订单超时处理、定时提醒等。

二、核心类详解

1. DelayTask.java

该类实现了Delayed接口,用于封装延时任务的基本信息,是延时队列中的任务载体。

package com.example.utils;

import java.util.concurrent.Delayed;

import java.util.concurrent.TimeUnit;

/*

@description: 延时任务封装类

@ClassName DelayTask

@author chen

@create 2025-08-14 16:15

@Version 1.0

*/

public class DelayTask<T> implements Delayed

{

// 延迟任务执行时间(时间戳毫秒)

private long taskExecuteTimeMs;

private Runnable task;

public DelayTask(long taskExecuteTimeMs, Runnable task)

{

this.taskExecuteTimeMs = taskExecuteTimeMs;

this.task = task;

}

public void setTaskExecuteTimeMs(long taskExecuteTimeMs)

{

this.taskExecuteTimeMs = taskExecuteTimeMs;

}

public Runnable getTask()

{

return task;

}

public long getTaskExecuteTimeMs()

{

return taskExecuteTimeMs;

}

@Override

public long getDelay(TimeUnit unit)

{

return unit.convert(taskExecuteTimeMs - System.currentTimeMillis(), java.util.concurrent.TimeUnit.MILLISECONDS);

}

@Override

public int compareTo(Delayed o)

{

if (o instanceof DelayTask)

{

DelayTask o1 = (DelayTask) o;

return Long.compare(this.getTaskExecuteTimeMs(), o1.getTaskExecuteTimeMs());

}

return 0;

}

}
关键方法说明:
  • getDelay(TimeUnit unit):计算当前任务距离执行时间的剩余延迟时间,返回值会根据指定的时间单位进行转换。
  • compareTo(Delayed o):用于任务之间的排序,确保DelayQueue能按照任务执行时间的先后顺序处理任务。

2. DelayTaskProcessorUtils.java

该类是延时队列的核心处理器,负责管理延时任务的添加、执行、线程管理及生命周期控制。


package com.example.utils;

import org.springframework.beans.factory.DisposableBean;

import java.util.Array
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小陈永不服输

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值