ScheduledExecutorService 定时晚上一点 执行任务,例子
时间: 2024-06-13 21:01:45 浏览: 162
`ScheduledExecutorService` 是 Java 中的一个工具类,用于在给定的时间间隔或延迟后执行任务。在 Java 中,你可以使用 `ScheduledThreadPoolExecutor` 或 `Executors` 类中的静态工厂方法来创建一个 `ScheduledExecutorService`。
以下是一个简单的例子,说明如何在晚上1点(假设是协调世界时间的23:00)定时执行一个任务:
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledTaskExample {
public static void main(String[] args) {
// 创建一个ScheduledExecutorService
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
// 定义一个Runnable任务
Runnable task = () -> {
System.out.println("Task executed at midnight");
};
// 使用ScheduledFuture来计划任务执行
ScheduledFuture<?> future = executor.scheduleAtFixedRate(task, 0, 1, TimeUnit.DAYS); // 延迟0秒开始,每1天执行一次
// 关闭线程池以确保所有任务完成后终止
// 当然,在实际应用中,你可能希望在程序结束时关闭它,或者在任务完成后优雅地关闭
executor.shutdown();
}
}
```
在这个例子中,`scheduleAtFixedRate` 方法接受四个参数:
1. 任务 (`task`):一个实现了 `Runnable` 或 `Callable` 接口的实例。
2. 初始延迟 (`0`):任务将在调用 `scheduleAtFixedRate` 后立即开始执行,这里是0秒。
3. 重复周期 (`1`, `TimeUnit.DAYS`):每1天执行一次任务。
4. 时间单位 (`TimeUnit.DAYS`):指定延迟和周期的时间单位。
注意,这个例子假设你的程序运行在24小时制环境中,如果使用的是其他时区或者非标准时间,你可能需要根据具体情况进行调整。此外,如果你的任务执行可能比较耗时,最好检查 `future.get()` 是否成功,以防止阻塞主线程。
阅读全文