java如何定时
定时任务实现方法
使用 java.util.Timer 和 TimerTask
创建 TimerTask 的子类并重写 run 方法定义任务逻辑,通过 Timer 调度执行。
import java.util.Timer;
import java.util.TimerTask;
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("Task executed");
}
};
Timer timer = new Timer();
timer.schedule(task, 0, 1000); // 延迟0ms,每隔1000ms执行
使用 ScheduledExecutorService
ScheduledThreadPoolExecutor 提供更灵活的线程池管理。
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(
() -> System.out.println("Task executed"),
0, 1, TimeUnit.SECONDS
);
使用 Spring 框架的 @Scheduled
适用于 Spring 应用,通过注解配置定时任务。
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTask {
@Scheduled(fixedRate = 1000)
public void execute() {
System.out.println("Task executed");
}
}
使用 Quartz 调度框架
适合复杂调度需求,支持持久化和集群。

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
JobDetail job = JobBuilder.newJob(MyJob.class)
.withIdentity("job1", "group1").build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1)
.repeatForever())
.build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
注意事项
Timer单线程执行,任务阻塞会影响后续任务。ScheduledExecutorService支持多线程,更推荐使用。- Spring 的
@Scheduled需启用@EnableScheduling。 - Quartz 适合分布式环境,但配置较复杂。
根据需求复杂度选择合适方案,轻量级任务优先考虑 ScheduledExecutorService 或 Spring 注解。






