代码示例:
import java.util.concurrent.TimeUnit;
/**
* end()方法返回从begin()方法调用开始到end()方法被调用时的时间差
*
* @author pengjunzhe
*/
public class Profiler {
/**
* 第一次调用get()方法会进行初始化(如果set方法没有调用),每个线程调用一次
*/
private static final ThreadLocal<Long> TIME_THREAD_LOCAL = new ThreadLocal<Long>() {
@Override
protected Long initialValue() {
return System.currentTimeMillis();
}
};
public static final void begin() {
TIME_THREAD_LOCAL.set(System.currentTimeMillis());
}
public static final long end() {
return System.currentTimeMillis() - TIME_THREAD_LOCAL.get();
}
public static void main(String[] args) throws Exception {
Profiler.begin();
TimeUnit.SECONDS.sleep(1);
System.out.println("Cost: " + Profiler.end() + " mills");
}
}