ScheduledExecutorService 定时晚上一点 ,7点 执行任务,例子
时间: 2024-06-13 15:01:45 浏览: 88
`ScheduledExecutorService` 是Java并发包中提供的一种用于安排和管理周期性或定时任务执行的服务。在Java中,你可以使用这个工具来创建一个任务,并按照指定的时间间隔或精确的时间进行调度。
下面是一个简单的例子,展示如何使用`ScheduledExecutorService` 在晚上1点(23:00)和早上7点(07:00)执行任务:
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Main {
private static final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
public static void main(String[] args) {
// 创建一个Runnable任务
Runnable task = () -> System.out.println("Task executed at " + currentTime());
// 第一项任务,晚上1点执行
long firstExecutionTime = System.currentTimeMillis() + TimeUnit.HOURS.toMillis(22); // 假设当前时间是00:00
executor.scheduleAtFixedRate(task, firstExecutionTime, 24 * 60 * 60 * 1000, TimeUnit.HOURS); // 每天执行一次,间隔24小时
// 第二项任务,早上7点执行
long secondExecutionTime = System.currentTimeMillis() + 7 * 60 * 60 * 1000; // 假设当前时间是00:00
executor.schedule(task, secondExecutionTime, TimeUnit.HOURS); // 一次性执行
// 保持程序运行以便查看定时任务是否按预期执行
try {
Thread.sleep(Long.MAX_VALUE);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static String currentTime() {
return java.time.LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm"));
}
}
```
在这个例子中,我们首先创建了一个`ScheduledExecutorService`实例。然后定义了一个`Runnable`任务,这里只是一个打印当前时间的简单示例。我们为每个时间点分别调用`scheduleAtFixedRate`和`schedule`方法,分别设置晚上1点和早上7点的任务执行。
注意,`scheduleAtFixedRate`会按照预定的时间间隔(这里是每天一次)重复执行任务,而`schedule`则是一次性在指定时间执行。
阅读全文