ThreadLocal作用
ThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储以后,只有在指定的线程中可以获取到存储的数据,对于其他线程来说则无法取到数据。
ThreadLocal源码
// Thread类中持有ThreadLocalMap,这个ThreadLocalMap里的Entry是继承WeakReference,hash冲突解决法是 开放地址法
ThreadLocal.ThreadLocalMap threadLocals = null;
// 由于ThreadLocalMap是跟随着具体的线程,所以自然get()时是获取当前线程的东西不会获取其他线程的数据。
public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
// 以自身为key,因为一个线程可以存多个不同的ThreadLocal的东西
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null) {
@SuppressWarnings("unchecked")
T result = (T)e.value;
return result;
}
}
return setInitialValue();
}
总结
ThreadLocal对象自身作为key,用来访问存在Thread对象中的数据。
来源:CSDN
作者:AaronXym
链接:https://blog.csdn.net/Crazy_xym/article/details/102380914