java如何定时打印
使用 Timer 和 TimerTask
Timer 和 TimerTask 是 Java 提供的简单定时任务工具。通过创建一个 TimerTask 并设置 Timer 的调度规则,可以实现定时打印功能。
import java.util.Timer;
import java.util.TimerTask;
public class TimerExample {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("定时打印: " + System.currentTimeMillis());
}
};
// 延迟 0 秒后执行,每隔 1000 毫秒(1秒)重复一次
timer.schedule(task, 0, 1000);
}
}
使用 ScheduledExecutorService
ScheduledExecutorService 是更灵活的定时任务工具,支持线程池管理,适合需要更高可控性的场景。

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledExecutorExample {
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable task = () -> System.out.println("定时打印: " + System.currentTimeMillis());
// 延迟 0 秒后执行,每隔 1 秒重复一次
executor.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS);
}
}
使用 Spring 的 @Scheduled 注解
如果项目基于 Spring 框架,可以直接使用 @Scheduled 注解实现定时任务,无需手动管理线程。

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class SpringScheduledExample {
@Scheduled(fixedRate = 1000) // 每隔 1 秒执行一次
public void printTime() {
System.out.println("定时打印: " + System.currentTimeMillis());
}
}
需要在 Spring 配置类上启用定时任务支持:
@EnableScheduling
@Configuration
public class AppConfig {}
使用 Quartz 框架
对于复杂的调度需求(如动态调整时间间隔),可以使用 Quartz 框架。
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzExample {
public static void main(String[] args) throws SchedulerException {
JobDetail job = JobBuilder.newJob(PrintJob.class)
.withIdentity("printJob", "group1")
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1)
.repeatForever())
.build();
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(job, trigger);
scheduler.start();
}
public static class PrintJob implements Job {
@Override
public void execute(JobExecutionContext context) {
System.out.println("定时打印: " + System.currentTimeMillis());
}
}
}
注意事项
Timer是单线程的,如果一个任务执行时间过长,会影响后续任务。ScheduledExecutorService和 Quartz 支持多线程,适合高并发场景。- Spring 的
@Scheduled注解简单易用,但需依赖 Spring 环境。






