ThreadLocal,线程变量,是一个以ThreadLocal对象为键,任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值。
可以通过set(T)
来设置一个值,在当前线程下通过get()
方法获取到原来设置的值。
我的理解:
ThreadLocal就相当于一个Map,所有的线程都可以往这个map里面put,其中key值就是这个线程,每个线程从这个map中取值的时候,都只能取到自己put的内容。
package com.threadlocaltest;
import java.util.concurrent.TimeUnit;
public class Profiler {
private static final ThreadLocal<Long> TIME_THREADLOCAL = new ThreadLocal<Long>(){
@Override
protected Long initialValue() {
return Thread.currentThread().getId();
}
};
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) {
Profiler.begin();
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Profiler.end());
}
}
网友评论