如何在Java中设置每日定时任务执行的定时器?


prtyaa
prtyaa 2024-01-05 22:15:16 63805 赞同 0 反对 0
分类: 资源 标签: 运维
Java定时器:如何设置每天定时执行任务? 在日常的Java开发中,我们经常会遇到需要每天定时执行某个任务的需求。比如说每天凌晨1点执行数据备份任务,或者每天晚上8点发送日报邮件等等。那么在Java中,我们可以使用定时器来实现这样的功能。

Java提供了多种定时器的实现方式,本文将介绍基于Timer和ScheduledExecutorService两种方式来设置每天定时执行任务,并提供具体的代码示例。

一、使用Timer类实现每天定时执行任务

Timer类是Java提供的一个简单的定时器类,可以用来执行定时任务。我们可以使用Timer类的schedule方法来设置每天定时执行任务,并通过Date类来指定执行任务的时间点。

下面是一个使用Timer类实现每天定时执行任务的代码示例:

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class DailyTaskWithTimer {
public static void main(String[] args) {
Timer timer = new Timer();

// 设置任务执行的时间(每天的定时时间)
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 1); // 设置时
calendar.set(Calendar.MINUTE, 0); // 设置分
calendar.set(Calendar.SECOND, 0); // 设置秒

// 如果当前时间已经过了设定的定时时间,则将定时时间推迟到明天
if (calendar.getTime().before(new Date())) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
}

// 执行任务
timer.schedule(new TimerTask() {
@Override
public void run() {
// TODO: 需要执行的任务逻辑
}
}, calendar.getTime(), 24 * 60 * 60 * 1000); // 24小时执行一次
}
}

登录后复制

上述代码中,我们通过Calendar类设置了任务执行的时间,要注意的是如果当前时间已经过了设定的定时时间,则将定时时间推迟到明天。然后利用Timer的schedule方法来执行任务,第一个参数是一个TimerTask对象,里面定义了需要执行的任务逻辑,第二个参数是任务的开始执行时间,第三个参数是任务的间隔时间,这里设置为24小时执行一次。

二、使用ScheduledExecutorService实现每天定时执行任务

ScheduledExecutorService是Java提供的一个高级定时器,它提供了更灵活和可靠的定时任务执行方式。我们可以使用ScheduledExecutorService的scheduleAtFixedRate方法来实现每天定时执行任务。

下面是一个使用ScheduledExecutorService实现每天定时执行任务的代码示例:

import java.util.Calendar;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class DailyTaskWithScheduledExecutor {
public static void main(String[] args) {
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();

// 设置任务执行的时间(每天的定时时间)
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 1); // 设置时
calendar.set(Calendar.MINUTE, 0); // 设置分
calendar.set(Calendar.SECOND, 0); // 设置秒

// 如果当前时间已经过了设定的定时时间,则将定时时间推迟到明天
if (calendar.getTime().before(new Date())) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
}

// 执行任务
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// TODO: 需要执行的任务逻辑
}
}, calendar.getTimeInMillis() – System.currentTimeMillis(), 24 * 60 * 60 * 1000, TimeUnit.MILLISECONDS); // 24小时执行一次

// 关闭定时器
//executorService.shutdown();
}
}

登录后复制

上述代码中,我们通过Calendar类设置了任务执行的时间,要注意的是如果当前时间已经过了设定的定时时间,则将定时时间推迟到明天。然后利用ScheduledExecutorService的scheduleAtFixedRate方法来执行任务,第一个参数是一个Runnable对象,里面定义了需要执行的任务逻辑,第二个参数是任务的初始延迟时间,这里计算得到的差值为当前设定时间和当前时间的差值,第三个参数是任务的执行间隔时间,这里设置为24小时执行一次,第四个参数是时间单位,这里设置为毫秒。因为ScheduledExecutorService是一个线程池,所以我们还需要在任务执行完毕后手动关闭线程池。

总结:

本文介绍了Java中如何设置每天定时执行任务的两种方式:使用Timer和ScheduledExecutorService类。这两种方式均可以实现每天定时执行任务的功能。开发者可以根据实际需求选择合适的方式来实现定时任务的调度。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL3
粉丝 1 资源 1949 + 关注 私信
最近热门资源
麒麟系统版本介绍白皮书  518
MiSans 阿拉伯语字体文件  462
解决新版本麒麟系统中微信打开白屏显示  402
麒麟系统进行系统监控,查看进程的运行时间来优化性能  334
临时关闭swap分区与永久关闭swap分区(注意必须确保系统有足够内存运行!)  226
统信桌面专业版添加字体  219
统信uos单一程序黑屏,任务栏正常显示解决办法  218
统信uos快捷键文档  189
统信系统双无线网卡设置关闭开启单一网卡  146
分享一个磁盘恢复工具,适用于多平台(包括统信)  124
最近下载排行榜
麒麟系统版本介绍白皮书 0
MiSans 阿拉伯语字体文件 0
解决新版本麒麟系统中微信打开白屏显示 0
麒麟系统进行系统监控,查看进程的运行时间来优化性能 0
临时关闭swap分区与永久关闭swap分区(注意必须确保系统有足够内存运行!) 0
统信桌面专业版添加字体 0
统信uos单一程序黑屏,任务栏正常显示解决办法 0
统信uos快捷键文档 0
统信系统双无线网卡设置关闭开启单一网卡 0
分享一个磁盘恢复工具,适用于多平台(包括统信) 0
作者收入月榜
1

prtyaa 收益399.62元

2

zlj141319 收益236.11元

3

IT-feng 收益219.61元

4

1843880570 收益214.2元

5

风晓 收益208.24元

6

哆啦漫漫喵 收益204.5元

7

777 收益173.07元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!