一、Timer 和 TimerTask
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Task executed every 2 seconds");
}
}, 0, 2000); // 延迟0ms启动,每2000ms执行一次
- 缺点:单线程执行,任务阻塞会导致后续任务延迟;不推荐生产环境使用。
二、ScheduledExecutorService
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(
() -> System.out.println("Task executed every 2 seconds"),
0, 2, TimeUnit.SECONDS
);
- 优点:基于线程池,支持多任务并发调度。
三、Spring 的 @Scheduled 注解
@SpringBootApplication
@EnableScheduling
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
@Component
public class MyTask {
@Scheduled(fixedRate = 2000)
public void runTask() {
System.out.println("Spring task executed every 2 seconds");
}
}
- 配置选项:fixedRate、cron、fixedDelay 等。
- 依赖:需要Spring框架支持。
四、Quartz 调度框架
配置任务和触发器:
// 定义任务
JobDetail job = JobBuilder.newJob(MyJob.class).build();
// 定义触发器,每2秒执行一次
Trigger trigger = TriggerBuilder.newTrigger()
.withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(2))
.build();
// 启动调度
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(job, trigger);
scheduler.start();
优点:支持复杂调度场景(如分布式任务)。
依赖:需引入Quartz库。