Java Stopwatch 多线程实现教程

引言

在本教程中,我们将学习如何使用 Java 创建一个简单的计时器(Stopwatch)应用,并通过多线程来处理用户的输入。这个项目不仅帮助你了解 Java 的多线程编程,还能让你熟悉基本的时间管理函数。

整体流程

以下是实现流程的概览:

步骤 描述
1 创建 Stopwatch 类
2 处理计时逻辑
3 创建用户输入线程
4 启动和停止计时器
5 编写主程序来运行

实现步骤

Step 1: 创建 Stopwatch 类

首先,我们需要创建一个 Stopwatch 类来处理计时的逻辑。

public class Stopwatch {
    private long startTime;  // 开始时间
    private long elapsedTime; // 已经过的时间
    private boolean running;  // 计时器状态

    public void start() {
        this.startTime = System.currentTimeMillis(); // 记录开始时间
        this.running = true; // 设置计时器为运行状态
    }

    public void stop() {
        if (running) {
            elapsedTime += System.currentTimeMillis() - startTime; // 计算经过的时间
            running = false; // 设置计时器为停止状态
        }
    }

    public long getElapsedTime() {
        return running ? (elapsedTime + (System.currentTimeMillis() - startTime)) : elapsedTime; // 返回总的经过时间
    }
}

Step 2: 处理计时逻辑

Stopwatch 类中,我们定义了三个方法:start()stop()getElapsedTime()。这些方法分别用于启动计时器、停止计时器和获取经过的时间。

Step 3: 创建用户输入线程

接下来,我们需要创建一个线程来处理用户的输入。

import java.util.Scanner;

public class InputThread extends Thread {
    private Stopwatch stopwatch;

    public InputThread(Stopwatch stopwatch) {
        this.stopwatch = stopwatch; // 传入 Stopwatch 实例
    }

    @Override
    public void run() {
        Scanner scanner = new Scanner(System.in);
        String command;
        while (true) {
            command = scanner.nextLine(); // 等待用户输入
            if (command.equalsIgnoreCase("start")) {
                stopwatch.start(); // 启动计时器
                System.out.println("Stopwatch started.");
            } else if (command.equalsIgnoreCase("stop")) {
                stopwatch.stop(); // 停止计时器
                System.out.println("Stopwatch stopped. Time elapsed: " + stopwatch.getElapsedTime() + " ms");
            } else if (command.equalsIgnoreCase("exit")) {
                break; // 退出循环
            }
        }
        scanner.close(); // 关闭扫描器
    }
}

Step 4: 启动和停止计时器

InputThread 类中,我们通过控制台输入“start”和“stop”来启动和停止计时器。

Step 5: 编写主程序来运行

最后,我们需要编写主程序来启动 StopwatchInputThread

public class Main {
    public static void main(String[] args) {
        Stopwatch stopwatch = new Stopwatch(); // 创建 Stopwatch 实例
        InputThread inputThread = new InputThread(stopwatch); // 创建输入线程
        inputThread.start(); // 启动输入线程
    }
}

甘特图

下面是实现项目的简单甘特图,便于你理解项目的时间安排:

gantt
    title 计时器项目时间安排
    dateFormat  YYYY-MM-DD
    section 创建 StopWatch 类
    编码: done, 2023-10-01, 1d
    section 处理计时逻辑
    编码: done, 2023-10-02, 1d
    section 创建用户输入线程
    编码: done, 2023-10-03, 1d
    section 启动和停止计时器
    编码: done, 2023-10-04, 1d
    section 编写主程序来运行
    编码: done, 2023-10-05, 1d

总结

在本教程中,我们创建了一个简单的 Java Stopwatch 应用,并实现了多线程处理用户输入的功能。通过这种方式,我们可以在计时的同时接收用户指令。这不仅提高了程序的响应速度,还使得计时器的使用变得更加灵活。

希望这个教程对你理解 Java 的多线程编程有所帮助。如果你有任何问题,欢迎进一步提问!