温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用java定时执行任务

发布时间:2026-10-31 17:36:32 来源:亿速云 阅读:100 作者:小樊 栏目:编程语言

在 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秒执行
    }
}

⚠️ 缺点:

  • 单线程
  • 一个任务异常会影响其他任务

三、Spring 项目:@Scheduled(最方便)

适合: Spring / Spring Boot 项目

1️⃣ 启动类开启定时

@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}

2️⃣ 使用注解

@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点执行");
    }
}

✅ 优点:

  • 配置简单
  • 支持 Cron

四、分布式 / 复杂调度:Quartz

适合: 集群、复杂调度规则

// 需要引入 quartz 依赖

常用于:

  • 任务持久化
  • 集群部署
  • 动态任务管理

五、方式对比总结

方式 推荐度 场景
ScheduledExecutorService ⭐⭐⭐⭐⭐ 普通 Java 项目
@Scheduled ⭐⭐⭐⭐⭐ Spring 项目
Timer ⭐⭐ 简单 demo
Quartz ⭐⭐⭐⭐ 企业级调度

如果你能告诉我:

  • 是否是 Spring Boot 项目
  • 是否需要 固定间隔 / 指定时间
  • 是否 分布式

我可以直接给你最合适的完整示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手