在 Java 中,定时执行任务常见有以下几种方式,按使用频率和推荐程度从高到低介绍:
ScheduledExecutorService(JDK 自带,最常用)适合: 大多数定时任务场景(替代 Timer)
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledExample {
public static void main(String[] args) {
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
// 延迟 1 秒后执行,之后每 5 秒执行一次
scheduler.scheduleAtFixedRate(() -> {
System.out.println("任务执行时间:" + System.currentTimeMillis());
}, 1, 5, TimeUnit.SECONDS);
}
}
✅ 优点:
Timer 更稳定Timer + TimerTask(不推荐)import java.util.Timer;
import java.util.TimerTask;
public class TimerExample {
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Timer 执行任务");
}
}, 1000, 5000); // 延迟1秒,每5秒执行
}
}
⚠️ 缺点:
@Scheduled(最方便)适合: Spring / Spring Boot 项目
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
@Component
public class TaskService {
// 每 5 秒执行一次
@Scheduled(fixedRate = 5000)
public void task() {
System.out.println("Spring 定时任务");
}
// Cron 表达式(每天 12 点)
@Scheduled(cron = "0 0 12 * * ?")
public void cronTask() {
System.out.println("每天中午12点执行");
}
}
✅ 优点:
适合: 集群、复杂调度规则
// 需要引入 quartz 依赖
常用于:
| 方式 | 推荐度 | 场景 |
|---|---|---|
| ScheduledExecutorService | ⭐⭐⭐⭐⭐ | 普通 Java 项目 |
| @Scheduled | ⭐⭐⭐⭐⭐ | Spring 项目 |
| Timer | ⭐⭐ | 简单 demo |
| Quartz | ⭐⭐⭐⭐ | 企业级调度 |
如果你能告诉我:
我可以直接给你最合适的完整示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。