Java 打印方法执行时长

2022-01-20 3042点热度 0条评论

工作中时常需要对一些代码执行的效率进行分析,但有些代码只能从执行时长去判断。

在之前常常使用System.currentTimeMillis()来执行,功能及实用性都得不到最优。

其实在Java生态中有2个非常实用的工具包,分别来自Commons-lang3Spring

Commons-lang3 StopWatch

Apache 提供的这个任务执行监视器功能丰富强大,灵活性强。

主要的方法:

  • start开始计时
  • split设置split点
  • getSplitTime获取从start 到 最后一次split的时间
  • reset重置计时
  • suspend暂停计时, 直到调用resume()后才恢复计时
  • resume恢复计时
  • stop停止计时
  • getTime统计从start到现在的计时
public static void main(String[] args) throws Exception {
	StopWatch watch = StopWatch.createStarted(); //创建后立即start,常用
	//StopWatch watch = new StopWatch();
	//watch.start();

	Thread.sleep(1000);
	System.out.println("统计从开始到现在运行时间:" + watch.getTime() + "ms"); //1000ms

	Thread.sleep(1000);
	watch.split();
	System.out.println("从start到此刻为止的时间:" + watch.getTime());
	System.out.println("从开始到第一个切入点运行时间:" + watch.getSplitTime()); //2245

	Thread.sleep(1000);
	watch.split();
	System.out.println("从开始到第二个切入点运行时间:" + watch.getSplitTime());

	watch.reset(); //重置后必须使用start方法
	watch.start();
	Thread.sleep(1000);
	System.out.println("重新开始后到当前运行时间是:" + watch.getTime()); //1000

	watch.suspend(); //暂停
	Thread.sleep(6000); //模拟暂停6秒钟

	watch.resume(); //上面suspend,这里要想重新统计,需要恢复一下
	System.out.println("恢复后执行的时间是:" + watch.getTime()); //1000  注意此时这个值还是1000

	watch.stop();
	System.out.println("花费的时间》》" + watch.getTime() + "ms"); //1002ms
	System.out.println("花费的时间》》" + watch.getTime(TimeUnit.SECONDS) + "s"); //1s 可以直接转成s

}

Spring StopWatch

public static void main(String[] args) throws Exception {
	// 强烈每一个秒表都给一个id,这样查看日志起来能够更加的精确
	// 至于Id 我觉得给UUID是可行的~
	StopWatch sw = new StopWatch(UUID.randomUUID().toString());

	sw.start("起床");
	Thread.sleep(1000);
	System.out.println("当前任务名称:" + sw.currentTaskName());
	sw.stop();

	sw.start("洗漱");
	Thread.sleep(2000);
	System.out.println("当前任务名称:" + sw.currentTaskName());
	sw.stop();

	sw.start("锁门");
	Thread.sleep(500);
	System.out.println("当前任务名称:" + sw.currentTaskName());
	sw.stop();

	System.out.println(sw.prettyPrint()); // 这个方法打印在我们记录日志时是非常友好的  还有百分比的分析哦
	System.out.println(sw.shortSummary());
	System.out.println(sw.currentTaskName()); // stop后它的值为null


	// 最后一个任务的相关信息
	System.out.println(sw.getLastTaskName());
	System.out.println(sw.getLastTaskInfo());

	// 任务总的耗时  如果你想获取到每个任务详情(包括它的任务名、耗时等等)可使用
	System.out.println("所有任务总耗时:" + sw.getTotalTimeMillis());
	System.out.println("任务总数:" + sw.getTaskCount());
	System.out.println("所有任务详情:" + sw.getTaskInfo()); // 拿到所有的任务
}

Jalena

原创内容,转载请注明出处! 部分内容来自网络,请遵守法律适用!

文章评论