Java注解每五天凌晨五点执行的定时任务怎么写
时间: 2023-07-04 20:07:19 浏览: 101
实现一个每五天凌晨五点执行的定时任务,可以使用Java中的ScheduledExecutorService来实现。具体步骤如下:
1. 创建一个Runnable对象,用于执行定时任务的具体操作。
2. 获取当前时间,并计算出距离下一次任务执行的时间。
3. 使用ScheduledExecutorService的scheduleAtFixedRate方法,传入上述Runnable对象和计算出的延迟时间,设置任务的周期为5天。
4. 在程序退出时,使用ScheduledExecutorService的shutdown方法关闭任务。
以下是示例代码:
```java
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledTask {
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
// 创建一个Runnable对象,用于执行定时任务的具体操作
Runnable task = new Runnable() {
@Override
public void run() {
// 定时任务的具体操作
System.out.println("定时任务执行了:" + new Date());
}
};
// 获取当前时间,并计算出距离下一次任务执行的时间
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 5);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date now = new Date();
if (calendar.getTime().before(now)) {
calendar.add(Calendar.DATE, 5);
}
long initialDelay = calendar.getTimeInMillis() - now.getTime();
long period = 5 * 24 * 60 * 60 * 1000; // 周期为5天
// 使用ScheduledExecutorService的scheduleAtFixedRate方法,传入上述Runnable对象和计算出的延迟时间,设置任务的周期为5天
executor.scheduleAtFixedRate(task, initialDelay, period, TimeUnit.MILLISECONDS);
// 在程序退出时,使用ScheduledExecutorService的shutdown方法关闭任务
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
executor.shutdown();
try {
executor.awaitTermination(10, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}));
}
}
```
阅读全文