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: 编写主程序来运行
最后,我们需要编写主程序来启动 Stopwatch
和 InputThread
。
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 的多线程编程有所帮助。如果你有任何问题,欢迎进一步提问!