从开源两个业余项目到技术成长:我的实战经验与避坑指南
2026/5/30 8:31:11
要实现 “计算任意方法执行时间” 这个功能,关键在于解耦计时逻辑和业务逻辑。
代码示例:
1. 定义任务接口
public interface TimeTask { void execute(); }2. 编写计时工具类
import java.util.concurrent.TimeUnit; /** * 计时工具类,负责测量任务的执行时间 */ public class TimeUtil { /** * 测量任务的执行时间,并打印结果 * @param task 要执行的任务(通过匿名内部类传入) */ public static void measureTime(TimeTask task) { // 1. 记录开始时间(纳秒级,精度更高) long startNano = System.nanoTime(); // 2. 执行传入的任务 task.execute(); // 3. 记录结束时间 long endNano = System.nanoTime(); // 4. 计算耗时并转换为秒 long durationNano = endNano - startNano; double durationSeconds = durationNano / 1_000_000_000.0; // 5. 打印结果,保留4位小数 System.out.printf("方法执行耗时:%.4f 秒%n", durationSeconds); } }3. 主程序调用(匿名内部类登场!)
public class Homework1 { public static void main(String[] args) { System.out.println("开始测试第一个任务:模拟循环计算..."); // 核心:使用匿名内部类,直接实现TimeTask接口 TimeUtil.measureTime(new TimeTask() { @Override public void execute() { // 这里写你要测试的业务代码 long sum = 0; for (int i = 0; i < 100_000_000; i++) { sum += i; } System.out.println("循环计算完成,sum = " + sum); } }); System.out.println("\n开始测试第二个任务:模拟网络延迟..."); // 再测试一个任务,同样用匿名内部类 TimeUtil.measureTime(new TimeTask() { @Override public void execute() { try { // 模拟耗时操作,比如Thread.sleep Thread.sleep(1500); // 休眠1.5秒 } catch (InterruptedException e) { e.printStackTrace(); } } }); } }