前言
TheadLocal主要用于将似有线程和该线程存放的副本对象做一个映射,是的线程之间互不影响。
它为当前执行线程提供了一个副本,用于保存对象。使得线程之间都互不干扰。
结构
- 每个Thread内部都有一个Map
Map里面存储线程本地对象(key)和线程的变量副本(value)
使用
private static class NameHolder {public static ThreadLocal<String> LOCAL = new ThreadLocal<>();public static void set(String name) {LOCAL.set(name);}public static String get() {return LOCAL.get();}public static void remove() {LOCAL.remove();}}
建议:
- 尽量采取一个单独的类来保存
TheadLocal。 - 使用
public static进行修饰。
源码
TheadLocal 保存来自于Thead对象。
public class Thread implements Runnable {ThreadLocal.ThreadLocalMap threadLocals = null;}
TheadLocal核心主要有get、set、remove方法。
public class ThreadLocal<T> {public T get() {Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t);if (map != null) {ThreadLocalMap.Entry e = map.getEntry(this);if (e != null) {@SuppressWarnings("unchecked")T result = (T)e.value;return result;}}return setInitialValue();}public void set(T value) {Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t);if (map != null)map.set(this, value);elsecreateMap(t, value);}public void remove() {ThreadLocalMap m = getMap(Thread.currentThread());if (m != null)m.remove(this);}}

