自定义ThreadLocal继承InheritableThreadLocal并且实现childValue方法, 可以在子线程中也使用到主线程设置在ThreadLocal中的数据,如下所示:
/*** 使用自定义MyInheritableThreadLocal实现了InheritableThreadLocal重写了childValue的目的* 父线程和子线程之间传递ThreadLocal中的变量值*/ private static final ThreadLocal<UserInfo> userInfo = new MyInheritableThreadLocal<>();
自定义类实现子线程使用主线程的ThreadLocal中的信息:
static class MyInheritableThreadLocal<T> extends InheritableThreadLocal<T> {@Overrideprotected T childValue(T parentValue) {if (Objects.isNull(parentValue)) {return null;}// 子线程多次使用,只会调用一次,放心使用, 如此写的目的是为了线程和子线程之间传递变量return (T) JacksonUtil.toJavaObj(JacksonUtil.toJsonStr(parentValue), parentValue.getClass());} }
完