threadLocal
来源:5-3 线程封闭
故事的小黄花丶
2019-05-16
老师,课程里您说每次请求结束的时候要把threadLocal中的值remove掉,是为了防止内存泄漏。会不会也考虑到了这样的因素:
通常程序里会有一个线程池,当一次请求过来,分配一个线程去处理这个请求,在请求之前往ThreadLocal中放值,如果请求结束后没有remove掉,有一定几率后面的请求也会分配到这个线程,比如登录的例子,过滤器会首先判断ThreadLocal中是否有值,就有可能取到的是之前某次请求没有remove掉的值。
不知道我描述的有没有什么问题,或者我对线程池理解的有什么差池,请老师指正
写回答
1回答
-
你好,这个理解上确实有偏差,threadlocal是针对指定线程的,是在某个线程下进行操作的,而线程池是不定线程在处理的,他们明显不在同一层面。通常,我们使用时,是一旦进入某个线程,将某些数据放到threadlocal里,线程执行完,remove掉放在threadlocal里的数据,放到线程池里,那么只相当于线程池里某个线程执行时的一部分。
00
相似问题