计算代码执行时间的工具类方法1

2026年01月23日 07:47

描述

使用 ThreadLocal 为每个线程保存独立的开始时间

标签

Java
计算代码执行时间的工具类方法1_1.txt 2,089 字符 | 66 行
import java.util.Locale;

public class TimeTracker {
    private final String trackerName;
    private Long startTime;
    
    // 构造方法,可指定追踪器名称
    public TimeTracker() {
        this.trackerName = Thread.currentThread().getName() + "-Tracker";
    }
    
    public TimeTracker(String name) {
        this.trackerName = name + "-" + Thread.currentThread().getName();
    }
    
    public void start() {
        this.startTime = System.currentTimeMillis();
        System.out.println("[" + trackerName + "] 开始时间: " + 
                          KentDataTime.getYYMMDDHHMMSSSSSString());
    }
    
    public void end() {
        if (startTime == null) {
            System.err.println("[" + trackerName + "] 警告: 请先调用 start()");
            return;
        }
        
        System.out.println("[" + trackerName + "] 结束时间: " + 
                          KentDataTime.getYYMMDDHHMMSSSSSString());
        System.out.println("[" + trackerName + "] " + 
                          formatDuration(System.currentTimeMillis() - startTime));
        startTime = null; // 重置,允许重复使用
    }
    
    public String getElapsedTime() {
        if (startTime == null) return "未开始";
        return formatDuration(System.currentTimeMillis() - startTime);
    }
    
    private String formatDuration(long durationMillis) {
        long totalSeconds = durationMillis / 1000;
        long minutes = totalSeconds / 60;
        long seconds = totalSeconds % 60;
        long millis = durationMillis % 1000;
        
        return String.format(Locale.CHINA, "花费了 %02d:%02d.%03d (共%dms)", 
                           minutes, seconds, millis, durationMillis);
    }
}

// 使用示例
public class Example {
    public static void main(String[] args) {
        // 每个对象独立计时
        TimeTracker tracker1 = new TimeTracker("任务A");
        TimeTracker tracker2 = new TimeTracker("任务B");
        
        tracker1.start();
        // ... 执行任务A
        tracker1.end();
        
        tracker2.start();  
        // ... 执行任务B
        tracker2.end();
    }
}

支持 Ctrl+A 全选,Ctrl+C 复制