问题:线程池中的A线程运行A1任务时设置了threadlocal1变量的值,A1任务结束后,对threadlocal1的引用不会消失。那么再次运行任务A2时再次设置threadlocal1的值,不会覆盖掉原来的值吗?还会继续生成新的Threadlocal对象作为新的可以吗?
期望:
有没有样例以供调试查看。
问题:线程池中的A线程运行A1任务时设置了threadlocal1变量的值,A1任务结束后,对threadlocal1的引用不会消失。那么再次运行任务A2时再次设置threadlocal1的值,不会覆盖掉原来的值吗?还会继续生成新的Threadlocal对象作为新的可以吗?
期望:
有没有样例以供调试查看。
在使用完ThreadLocal后,最好是将其变量进行删除,因为ThreadLocal是整个线程的生命周期有效,形成了线程与线程之间的隔离,所以无法覆盖。
参考代码如下,通过getUser获取值,setUser设置值,remove删除值,多线程时为了保证内存不溢出,需要在线程结束时进行删除,否则将一直占用内容:
public class RequestHolder {
private static final ThreadLocal<SysUser> userHolder = new ThreadLocal<SysUser>();
public static void setUser(SysUser sysUser) {
userHolder.set(sysUser);
}
public static SysUser getUser() {
return userHolder.get();
}
public static void remove() {
userHolder.remove();
}
}
参考博客:https://blog.csdn.net/zhuocailing3390/article/details/123030701