java统计耗时stopwatch多线程
时间: 2025-02-11 20:15:35 浏览: 62
### Java 中使用 StopWatch 实现多线程应用的性能计时
为了在 Java 多线程环境中有效地使用 `StopWatch` 记录各个任务的执行时间,可以采用如下方式:
#### 创建并启动 StopWatch 对象
```java
import org.springframework.util.StopWatch;
public class MultiThreadedStopWatchExample {
private static final int THREAD_COUNT = 5;
public static void main(String[] args) throws InterruptedException {
StopWatch stopWatch = new StopWatch();
// 启动总定时器
stopWatch.start("Overall Execution");
```
#### 定义线程任务
对于每一个单独的任务,在其内部也创建独立的 `StopWatch` 实例以便精确跟踪该特定任务所花费的时间。
```java
Runnable taskRunner = () -> {
try (var localStopWatch = new StopWatch()) {
String threadName = Thread.currentThread().getName();
localStopWatch.start(threadName);
// 模拟工作负载
Thread.sleep((long)(Math.random() * 1000));
localStopWatch.stop();
System.out.printf("%s completed in %d ms\n",
threadName,
localStopWatch.getLastTaskTimeMillis());
}
};
```
#### 提交任务至线程池
通过 `ExecutorService` 或者其他形式的线程管理机制提交这些带有内置计时逻辑的任务给多个工作者线程去完成。
```java
try (var executorService = java.util.concurrent.Executors.newFixedThreadPool(THREAD_COUNT)) {
for (int i = 0; i < THREAD_COUNT; ++i)
executorService.submit(taskRunner);
// 阻塞直到所有任务结束
executorService.shutdown();
while (!executorService.isTerminated())
;
}
finally {
stopWatch.stop();
}
// 输出总体耗时以及各子任务详情
System.out.println(stopWatch.prettyPrint());
System.out.println("Total execution time: " + stopWatch.getTotalTimeMillis() + "ms");
```
这种方法不仅能够监控整个应用程序层面的整体表现,还能深入分析单个操作的具体开销。这有助于识别潜在瓶颈所在之处,并据此优化代码效率[^1]。
阅读全文
相关推荐




















