1、背景
项目中经常会用到类似一些需要延迟执行的功能,比如缓存。java提供了DelayQueue来很轻松的实现这种功能。Delayed接口中的getDelay方法返回值小于等于0的时候,表示时间到达,可以从DelayQueue中通过take()方法取的到期的对象。到期对象是实现了Delayed的类。
2、demo
2.1 依赖配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.2 整体架构
工具类TaskBase:
执行任务所需的基础参数
import lombok.Data;
@Data
public class TaskBase {
//任务参数,根据业务需求多少都行
private Long identifier;
public TaskBase(Long identifier) {
this.identifier = identifier;
}
}
执行的任务和时间DelayTask
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
/**
* 延时任务
*/
public class DelayTask implements Delayed {
//任务参数
final private TaskBase data;
//任务的延时时间,单位天
final private long startTime;
/**
* 构造延时任务
*