StopWatch
类是Spring框架中提供的一个用于测量时间段的工具类。
类的构造函数
StopWatch()
: 默认构造函数,创建一个没有ID的StopWatch
实例。StopWatch(String id)
: 带有ID的构造函数,允许用户为StopWatch
实例设置一个标识符。
类的属性
id
:StopWatch
实例的标识符。keepTaskList
: 一个布尔值,指示是否保留任务列表。taskList
: 一个List<TaskInfo>
,用于存储任务的详细信息。startTimeNanos
: 记录当前任务开始时间的纳秒值。currentTaskName
: 当前正在执行的任务的名称。lastTaskInfo
: 最后一个执行的任务的信息。taskCount
: 执行的任务数量。totalTimeNanos
: 所有任务的总执行时间(纳秒)。
类的方法
核心方法
start()
: 开始一个新的任务,如果没有指定任务名称,则使用默认名称。start(String taskName)
: 开始一个新的指定名称的任务。stop()
: 停止当前正在执行的任务,并记录其执行时间。
状态检查方法
isRunning()
: 检查StopWatch
是否正在运行。currentTaskName()
: 返回当前任务的名称。
信息获取方法
getLastTaskTimeNanos()
: 获取最后一个任务执行的时间(纳秒)。getLastTaskTimeMillis()
: 获取最后一个任务执行的时间(毫秒)。getLastTaskName()
: 获取最后一个任务的名称。getLastTaskInfo()
: 获取最后一个任务的详细信息。
总结方法
getTotalTimeNanos()
: 获取所有任务的总执行时间(纳秒)。getTotalTimeMillis()
: 获取所有任务的总执行时间(毫秒)。getTotalTimeSeconds()
: 获取所有任务的总执行时间(秒)。getTaskCount()
: 获取已执行的任务数量。getTaskInfo()
: 获取所有任务的详细信息。
输出方法
shortSummary()
: 返回StopWatch
的简短摘要。prettyPrint()
: 返回格式化的字符串,其中包含所有任务的详细信息。toString()
: 返回StopWatch
的字符串表示形式,包含简短的摘要和所有任务的详细信息(如果保留了任务列表)。
内部类
TaskInfo
: 一个内部类,用于存储单个任务的名称和执行时间。
静态工具方法
nanosToMillis(long duration)
: 将纳秒转换为毫秒。nanosToSeconds(long duration)
: 将纳秒转换为秒。
使用场景
StopWatch
类常用于性能测试和调试,可以帮助开发人员测量代码段的执行时间,从而进行性能优化。通过它可以轻松地追踪和分析应用程序中各个部分的执行时间。
查看代码
java
import org.springframework.util.StopWatch;
public class StopWatchExample {
public static void main(String[] args) {
// 创建一个StopWatch实例
StopWatch stopWatch = new StopWatch("MyStopWatch");
// 开始计时任务1
stopWatch.start("Task 1");
performTask1();
// 停止计时任务1
stopWatch.stop();
// 开始计时任务2
stopWatch.start("Task 2");
performTask2();
// 停止计时任务2
stopWatch.stop();
// 打印出所有任务的执行时间和总时间
System.out.println(stopWatch.prettyPrint());
}
private static void performTask1() {
// 模拟任务1的执行,例如进行一些计算
try {
Thread.sleep(1000); // 假设任务1执行了1秒
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
private static void performTask2() {
// 模拟任务2的执行,例如进行一些计算
try {
Thread.sleep(1500); // 假设任务2执行了1.5秒
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
在这个例子中,我们创建了一个StopWatch
实例并给它设置了一个ID "MyStopWatch"
。我们使用start
方法来标记任务的开始,并使用stop
方法来标记任务的结束。我们模拟了两个任务performTask1
和performTask2
,它们分别执行了1秒和1.5秒。
执行stopWatch.prettyPrint()
方法将打印出以下格式的输出:
StopWatch 'MyStopWatch': running time = 2500574000 ns
---------------------------------------------
ns % Task name
---------------------------------------------
1000000000 40% Task 1
1500000000 60% Task 2
输出显示了每个任务的名称、执行时间(纳秒),以及每个任务占总时间的百分比。它还显示了所有任务的总执行时间。这样的信息对于分析代码性能非常有用。