threadLocal

来源:5-3 线程封闭

故事的小黄花丶

2019-05-16

老师,课程里您说每次请求结束的时候要把threadLocal中的值remove掉,是为了防止内存泄漏。会不会也考虑到了这样的因素:
通常程序里会有一个线程池,当一次请求过来,分配一个线程去处理这个请求,在请求之前往ThreadLocal中放值,如果请求结束后没有remove掉,有一定几率后面的请求也会分配到这个线程,比如登录的例子,过滤器会首先判断ThreadLocal中是否有值,就有可能取到的是之前某次请求没有remove掉的值。
不知道我描述的有没有什么问题,或者我对线程池理解的有什么差池,请老师指正

写回答

1回答

Jimin

2019-05-16

你好,这个理解上确实有偏差,threadlocal是针对指定线程的,是在某个线程下进行操作的,而线程池是不定线程在处理的,他们明显不在同一层面。通常,我们使用时,是一旦进入某个线程,将某些数据放到threadlocal里,线程执行完,remove掉放在threadlocal里的数据,放到线程池里,那么只相当于线程池里某个线程执行时的一部分。

0
0

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程