threadlocal是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据。
ThreadLocal的静态内部类ThreadLocalMap为每个Thread都维护了一个数组table,ThreadLocal确定了一个数组下标,而这个下标就是value存储的对应位置。
以下是ThreadLocal工具类(从网上收集的资料进行调整)
import java.util.HashMap; import java.util.Map; /** * @author lcy * @since 2021/7/15 15:32 */ public class ThreadLocalUtil { private static final ThreadLocal<Map<String, Object>> threadLocal = ThreadLocal.withInitial(() -> new HashMap<>(10)); public static Map<String, Object> getThreadLocal() { return threadLocal.get(); } public static Object get(String key) { Map<String, Object> map = threadLocal.get(); return map.get(key); } public static void set(String key, Object value) { Map<String, Object> map = threadLocal.get(); map.put(key, value); } public static void set(Map<String, Object> keyValueMap) { Map<String, Object> map = threadLocal.get(); map.putAll(keyValueMap); } public static void remove() { threadLocal.remove(); } public static <T> T remove(String key) { Map<String, Object> map = threadLocal.get(); return (T) map.remove(key); } }