Java 定时器:每天执行一次代码示例
可以使用 Java 中的 ScheduledExecutorService 来实现定时器。以下是一个每隔一天执行一次代码的示例:
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 DailyTimerExample {
public static void main(String[] args) {
// 创建一个单线程的 ScheduledExecutorService
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
// 获取当前时间
Calendar now = Calendar.getInstance();
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
// 计算距离明天的时间差
int delay = (24 - hour) * 60 * 60 - minute * 60 - second;
// 新建一个 Runnable,用于执行定时任务
Runnable task = new Runnable() {
@Override
public void run() {
// 在这里编写需要定时执行的代码
System.out.println('每隔一天执行一次的代码');
// 更新下一次执行的时间
Calendar next = Calendar.getInstance();
next.add(Calendar.DAY_OF_YEAR, 1);
// 获取下一次执行的时间
int nextHour = next.get(Calendar.HOUR_OF_DAY);
int nextMinute = next.get(Calendar.MINUTE);
int nextSecond = next.get(Calendar.SECOND);
// 计算下一次执行的时间差
int nextDelay = (nextHour - hour) * 60 * 60 + (nextMinute - minute) * 60 + (nextSecond - second);
// 重新调度任务
scheduler.schedule(this, nextDelay, TimeUnit.SECONDS);
}
};
// 延迟一段时间后执行任务
scheduler.schedule(task, delay, TimeUnit.SECONDS);
}
}
在上面的代码中,首先创建了一个单线程的 ScheduledExecutorService 对象,然后获取当前时间,并计算距离明天的时间差。接着通过 Runnable 对象实现定时任务,并在其中编写需要定时执行的代码。在任务执行完后,更新下一次执行的时间,并重新调度任务。最后,通过 schedule 方法延迟一段时间后执行任务。
注意:以上代码中使用的是秒作为时间单位,如果需要更精确的控制,可以使用更小的时间单位(如毫秒)来计算时间差。
原文地址: https://www.cveoy.top/t/topic/macu 著作权归作者所有。请勿转载和采集!