java如何使用定时
使用 Timer 和 TimerTask
Java 提供了 java.util.Timer 和 java.util.TimerTask 类来实现简单的定时任务。
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("Task executed at: " + new Date());
}
};
// 延迟 1 秒后执行,之后每 2 秒执行一次
timer.schedule(task, 1000, 2000);
使用 ScheduledExecutorService
ScheduledExecutorService 是更现代且灵活的定时任务实现方式,推荐替代 Timer。
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable task = () -> System.out.println("Task executed at: " + new Date());
// 延迟 1 秒后执行,之后每 2 秒执行一次
executor.scheduleAtFixedRate(task, 1, 2, TimeUnit.SECONDS);
使用 Spring 的 @Scheduled 注解
在 Spring 框架中,可以通过 @Scheduled 注解轻松实现定时任务。
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTask {
@Scheduled(fixedRate = 2000) // 每 2 秒执行一次
public void executeTask() {
System.out.println("Task executed at: " + new Date());
}
}
需要在 Spring 配置类上启用定时任务支持:
@EnableScheduling
@Configuration
public class AppConfig {}
使用 Quartz 框架
对于复杂的调度需求,Quartz 是一个功能强大的开源调度库。
- 添加依赖(Maven):
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> - 创建任务类实现
Job接口:public class QuartzTask implements Job { @Override public void execute(JobExecutionContext context) { System.out.println("Quartz task executed at: " + new Date()); } } - 配置并启动调度器:
SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.start();
JobDetail job = JobBuilder.newJob(QuartzTask.class) .withIdentity("quartzTask", "group1") .build();
Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(2) .repeatForever()) .build();
scheduler.scheduleJob(job, trigger);

### 注意事项
- `Timer` 是单线程的,一个任务延迟会影响其他任务。
- `ScheduledExecutorService` 支持多线程,更适合高并发场景。
- Spring 的 `@Scheduled` 适合集成在 Spring 项目中的简单任务。
- Quartz 适合分布式、持久化或复杂调度的场景。





