threadLocal 和 线程池 问题记录

孤街浪徒 提交于 2019-12-21 13:43:21

threadLocal 和 线程池 问题记录

问题

在web应用中,获取用户的身份后,使用filter将身份信息采用putIfAbsent的形式放在了 threadLocal 中。循环请求servlet,发现用户身份没有变化。

解析

  1. 只有当ThreadLocal的生命周期受限于Task的生命周期时,在Thread Pool的Thread里使用ThreadLocal才有意义。
  2. 在线程池的线程中不应该使用ThreadLocal在任务之间传递值。

ThreadLocal的生命周期不等于一次request请求的生命周期,每个request请求的响应是tomcat从线程池中分配的线程,线程会被下个请求复用。所以请求结束后必须删除线程本地变量。

在使用ThreadLocal的时候管理它的创建、销毁,那么就可以用。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!