做外贸网站维护费是多少,视觉中国设计网,开网页死机,杭州知名网站制作公司ThreadLocal#xff0c;即线程变量#xff0c;是一个以ThreadLocal对象为键#xff0c;任意对象为值的存储结构。这个结构被附带在线程上#xff0c;也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的值。可以通过set(T)方法来设置一个值#xff0c;在…ThreadLocal即线程变量是一个以ThreadLocal对象为键任意对象为值的存储结构。这个结构被附带在线程上也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的值。可以通过set(T)方法来设置一个值在当前线程下在通过get()方法获取到原先设置的值。 首先来看下set方法基于JDK8
/*** 将此线程局部变量的当前线程副本设置为指定值。大多数子类不需要重新此方法* 仅依靠initialValue方法来设置线程局部变量的值** param value the value to be stored in the current threads copy of* this thread-local.*/public void set(T value) {Thread t Thread.currentThread();ThreadLocalMap map getMap(t);if (map ! null)map.set(this, value);elsecreateMap(t, value);}/*** 获取与ThreadLocal关联的map在InheritableThreadLocal中重写** param t the current thread* return the map*/ThreadLocalMap getMap(Thread t) {return t.threadLocals;}在set方法中首先获取当前线程然后获取当前线程关联的ThreadLocalMap而ThreadLocalMap是ThreadLocal类中定义的一个结构。ThreadLocalMap的部分源码如下
static class ThreadLocalMap {static class Entry extends WeakReferenceThreadLocal? {/** The value associated with this ThreadLocal. */Object value;Entry(ThreadLocal? k, Object v) {super(k);value v;}}
}其在ThreadLocalMap中定义了一个Entry对象用来存储我们在set方法中方的值。
ThreadLocal介绍