如何设置定时器java
使用 java.util.Timer 类
创建 Timer 实例并调用 schedule 方法,传入 TimerTask 对象和延迟时间(毫秒)。TimerTask 是一个抽象类,需要实现其 run 方法定义定时任务逻辑。
import java.util.Timer;
import java.util.TimerTask;
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Task executed after 2 seconds");
}
}, 2000); // 延迟2秒执行
使用 ScheduledExecutorService
ScheduledExecutorService 是更现代的定时任务接口,支持线程池管理。通过 Executors.newSingleThreadScheduledExecutor() 创建实例,调用 schedule 方法。
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(() -> {
System.out.println("Task executed after 3 seconds");
}, 3, TimeUnit.SECONDS);
executor.shutdown(); // 任务完成后关闭
周期性任务
使用 scheduleAtFixedRate 或 scheduleWithFixedDelay 实现周期性任务。前者按固定频率执行,后者在上次任务完成后延迟固定时间执行。
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(() -> {
System.out.println("Periodic task runs every 1 second");
}, 0, 1, TimeUnit.SECONDS);
// 注意:需在适当位置调用 executor.shutdown() 停止任务
使用 Spring 的 @Scheduled 注解
在 Spring 框架中,可通过 @Scheduled 注解轻松实现定时任务。需在配置类添加 @EnableScheduling。

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTask {
@Scheduled(fixedRate = 5000) // 每5秒执行一次
public void run() {
System.out.println("Spring Scheduled task executed");
}
}
注意事项
- 线程安全:定时任务代码需确保线程安全,避免共享资源冲突。
- 异常处理:
TimerTask中未捕获的异常会终止定时器,而ScheduledExecutorService会静默丢弃异常。 - 资源释放:使用完
Timer或ScheduledExecutorService后调用cancel()或shutdown()释放资源。
以上方法覆盖了从基础到高级的 Java 定时器实现场景,可根据项目需求选择合适方案。






