Java简单任务调度器实现

使用Java实现一个简单的任务调度器

在现代软件开发中,任务调度是一个非常常见的功能。无论是后台数据处理、定时报告生成,还是周期性资源清理,任务调度都能提供方便的解决方案。在这篇文章中,我们将使用Java来实现一个简单的任务调度器。

功能需求

我们的目标是构建一个调度器,它能够:

  1. 在特定时间间隔执行任务。
  2. 提供停止、重新启动功能。
  3. 支持动态增加和删除任务。

设计方案

为实现上述功能,我们需要以下组件:

  1. 任务接口(Task): 表示调度器可以执行的任务。 每个任务都实现run方法。

  2. 调度器类(Scheduler): 管理任务的添加、移除和执行。 维护一个任务队列,并在设定的时间间隔轮询执行任务。

  3. 定时执行: 使用ScheduledExecutorService实现定时执行任务,并能够处理任务调度的启动和停止。

任务接口

public interface Task {
    void run();
}

调度器类

import java.util.concurrent.*;
import java.util.List;
import java.util.ArrayList;

public class Scheduler {
    private final ScheduledExecutorService executorService;
    private final List<ScheduledFuture<?>> scheduledTasks;
    private final List<Task> tasks;
    private final long interval;

    public Scheduler(long interval) {
        this.executorService = Executors.newSingleThreadScheduledExecutor();
        this.scheduledTasks = new ArrayList<>();
        this.tasks = new ArrayList<>();
        this.interval = interval;
    }

    public void addTask(Task task) {
        tasks.add(task);
    }

    public void removeTask(Task task) {
        tasks.remove(task);
    }

    public void start() {
        for (Task task : tasks) {
            ScheduledFuture<?> future = executorService.scheduleAtFixedRate(task::run, 0, interval, TimeUnit.MILLISECONDS);
            scheduledTasks.add(future);
        }
    }

    public void stop() {
        for (ScheduledFuture<?> future : scheduledTasks) {
            future.cancel(false);
        }
        scheduledTasks.clear();
        executorService.shutdown();
    }
}

使用示例

下面是如何使用这个简单调度器的示例:

public class Main {
    public static void main(String[] args) {
        Scheduler scheduler = new Scheduler(1000); // 每隔1秒执行一次任务

        Task printTask = () -> System.out.println("Task executed at: " + System.currentTimeMillis());

        scheduler.addTask(printTask);
        scheduler.start();

        try {
            Thread.sleep(5000); // 允许调度器运行5秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        scheduler.stop();
    }
}

结论

使用Java的ScheduledExecutorService,我们可以轻松实现一个功能简单但有效的任务调度器。以上方案展示了如何添加、移除和调度任务,为应用程序提供基本的任务自动化能力。依据需求的复杂性,可以进一步扩展此调度器的功能,如支持更多的调度策略、任务优先级管理等。