Java 本地线程(ThreadLocal)存储使用
ThreadLocal:官方解释是线程内存储变量,这些变量在每一个线程读取变量是互相独立的。通过get和set方法就可以得到当前线程对应的值。
实际上是ThreadLocal的静态内部类ThreadLocalMap会为每个Thread维护了一个数组table,ThreadLocal会确定一个数组下标,这个下标就是value存储的位置
ThreadLocal提供的set方法不难看出,每次set时,都会先根据当前线程或取ThreadLocalMap,如果当前ThreadLocalMap存在就重新赋值,反之创建一个ThreadLocalMap
public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { map.set(this, value); } else { createMap(t, value); } }
ThreadLocal使用方法很简单
public class TestThreadBinder { private static final ThreadLocal> testThreadLocal = new ThreadLocal(); /** * 存储&绑定 * @param list */ public static void bind(List
list) { testThreadLocal.set(list); } /** * 获取绑定数据 * @return */ public static List get() { return (List ) testThreadLocal.get(); } /** * 删除 */ public static void remove() { testThreadLocal.remove(); } }