实现周期性执行(定时任务)的方法有很多,其中比较常用的方式是使用Java中的ScheduledExecutorService,下面是完整的攻略:
步骤一:引入依赖
在项目中引入ScheduledExecutorService的依赖,可以使用Maven来管理依赖,添加以下依赖到pom.xml文件中:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
步骤二:创建定时任务
使用ScheduledExecutorService来创建一个定时任务。可以使用匿名类或者Lambda表达式来实现定时任务,方法定义如下:
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit);
其中:
- command:要定时执行的任务(可以是实现Runnable接口的实例,也可以使用Lambda表达式实现);
- initialDelay:任务开始执行前的延迟时间;
- period:任务执行的周期;
- unit:时间单位,如 TimeUnit.SECONDS 表示秒数。
示例一:使用匿名类实现定时任务
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(new Runnable() {
public void run() {
// do something
}
}, 0, 10, TimeUnit.SECONDS);
示例二:使用Lambda表达式实现定时任务
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(() -> {
// do something
}, 0, 10, TimeUnit.SECONDS);
步骤三:关闭定时任务
在程序结束时,需要手动关闭定时任务,避免程序一直运行导致内存泄漏。在上面的例子中,执行shutdown()方法即可关闭定时任务。
scheduler.shutdown();
示例:完整的定时任务代码
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class ScheduledExecutorServiceDemo {
public static void main(String[] args) {
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
ScheduledFuture<?> future = scheduler.scheduleAtFixedRate(() -> {
System.out.println("Current Time: " + System.currentTimeMillis());
}, 0, 1, TimeUnit.SECONDS);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
future.cancel(true);
scheduler.shutdown();
}
}
此示例中,定时任务每隔一秒钟输出当前的系统时间,执行5秒后手动关闭定时任务。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现周期性执行(定时任务) - Python技术站