线程间通信ThreadLocal
ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构。这 个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个 线程上的一个值。
可以通过set(T)方法来设置一个值,在当前线程下再通过get()方法获取到原先设置的值。
package com.dongguo.sync;
import java.util.concurrent.TimeUnit;
/** * @author Dongguo * @date 2021/9/10 0010-15:00 * @description: */
public class ThreadLocalDemo {
private static final ThreadLocal<Long> TIME_THREADLOCAL = ThreadLocal.withInitial(() -> {
return System.currentTimeMillis();
});
public static final void begin() {
TIME_THREADLOCAL.set(System.currentTimeMillis());
}
public static final long end() {
return System.currentTimeMillis() - TIME_THREADLOCAL.get();
}
public static void main(String[] args) {
ThreadLocalDemo.begin();//开始时间
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Cost: " + ThreadLocalDemo.end() + " mills");
}
}
运行结果
Cost: 1005 mills
ThreadLocalDemo类可以被复用在方法调用耗时统计的功能上,在方法的入口前执行begin()方法,在方法调用后执行end()方法,好处是两个方法的调用不用在一个方法或者类中,比如在AOP(面 向方面编程)中,可以在方法调用前的切入点执行begin()方法,而在方法调用后的切入点执行 end()方法,这样依旧可以获得方法的执行耗时。
还没有评论,来说两句吧...