一、程序概述
本程序实现了一个基于 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

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



