Java计时器方案

问题描述

我们需要编写一个Java程序,实现一个计时器,能够在指定的时间间隔内不断触发事件并执行相应的任务。具体要求如下:

  • 计时器需要能够接收用户输入的时间间隔。
  • 计时器需要能够启动、暂停、继续和停止操作。
  • 计时器在每个时间间隔结束后,需要执行指定的任务。

方案设计

为了实现这个计时器,我们可以采用以下设计方案。

  1. 创建一个Timer类,用于管理计时器的状态和操作。
  2. Timer类中,创建一个内部类TimerTask,用于表示要执行的任务。
  3. 定义 Timer 类的方法,使其能够接收时间间隔、启动计时器、暂停、继续和停止计时器。
  4. 使用java.util.Timer类的schedule方法来执行任务。

下面我们来详细讲解每个步骤。

类图

classDiagram
    class Timer{
        - TimerTask timerTask
        - TimerTask currentTask
        - TimerTaskListener listener
        - TimerTaskExecutor executor
        --
        + setTask(task: TimerTask): void
        + start(): void
        + pause(): void
        + resume(): void
        + stop(): void
    }
    class TimerTask{
        + run(): void
    }
    class TimerTaskListener{
        + taskStarted(): void
        + taskFinished(): void
    }
    class TimerTaskExecutor{
        --
        + execute(task: TimerTask, delay: long): void
    }

代码实现

首先,我们需要创建一个TimerTask类,表示要执行的任务。这个类只需要一个run方法,用于具体执行任务的代码。

public class TimerTask {
    public void run() {
        // 执行任务的代码
    }
}

接下来,我们创建一个TimerTaskListener接口,用于监听任务的启动和完成事件。

public interface TimerTaskListener {
    void taskStarted();
    void taskFinished();
}

然后,我们创建一个TimerTaskExecutor类,用于执行任务。这个类中的方法使用java.util.Timer类的schedule方法来执行任务。

import java.util.Timer;
import java.util.TimerTask;

public class TimerTaskExecutor {
    public void execute(TimerTask task, long delay) {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                task.run();
            }
        }, delay);
    }
}

最后,我们创建一个Timer类,用于管理计时器的状态和操作。这个类中的方法可以设置任务、启动计时器、暂停、继续和停止计时器。

public class Timer {
    private TimerTask timerTask;
    private TimerTask currentTask;
    private TimerTaskListener listener;
    private TimerTaskExecutor executor;

    public void setTask(TimerTask task) {
        this.timerTask = task;
    }

    public void start() {
        if (timerTask == null) {
            throw new IllegalStateException("Timer task is not set");
        }
        currentTask = timerTask;
        listener.taskStarted();
        executor.execute(currentTask, 0);
    }

    public void pause() {
        currentTask.cancel();
    }

    public void resume() {
        start();
    }

    public void stop() {
        if (currentTask != null) {
            currentTask.cancel();
            listener.taskFinished();
        }
    }
}

代码解释

  • Timer类中的setTask方法用于设置要执行的任务。
  • start方法会启动计时器,首先会触发taskStarted事件,然后使用TimerTaskExecutor类执行任务。
  • pause方法会取消当前正在执行的任务。
  • resume方法会重新启动计时器,即执行之前设置的任务。
  • stop方法会停止计时器,首先会取消当前正在执行的任务,然后触发taskFinished事件。

总结

通过上述方案设计和代码实现,我们成功实现了一个Java计时器,可以按照指定的时间间隔执行任务。使用这个计时器,我们可以在项目中实现各种需要定时触发的功能。

希望本文对你有所帮助!