ThreadLocal该何时注入值?

一.我们用ThreadLocal来干嘛?

        ThreadLocal 是一个 Java 中的类,用于在多线程环境下维护线程局部变量。每个线程都有自己独立的变量副本,互不干扰。通常情况下,我们使用 ThreadLocal 来存储与线程相关的数据,使得这些数据对于每个线程都是独立的。

二.为什么要用ThreadLocal?

        有些数据只需要在当前线程内部使用,不需要在多个线程之间共享,使用 ThreadLocal 可以很好地实现这种线程封闭性;也就是多线程下的数据隔离!

        在多线程环境下,如果某些数据需要在不同线程之间传递,可能需要通过参数传递或者共享变量,而使用 ThreadLocal 则可以避免这种复杂性,每个线程都可以通过 ThreadLocal 直接获取自己的数据.

三.何时需要注入值?

        通常情况下,你会在一个线程中设置 ThreadLocal 的值,然后在同一个线程中的其他地方获取这个值。这样可以确保数据只在当前线程内部有效,不会被其他线程访问到。注入值的时机取决于你的具体需求,通常在线程开始时或者某个特定操作中注入值。

        在我之前的项目中就犯过一个错误,在登录成功存入redis,再存入ThreadLocal中,我当时认为,在这里注入后,其他地方也就可以使用了,幸好当时组长review的时候发现了这个问题,并一步一步指引我去理解,在登录成功后注入ThreadLocal,那一个请求是一个线程吗?线程销毁ThreadLocal中的值还会存在吗,你这样注入值有意义吗?之后深看ThreadLocal,首先当时做的项目是springcloud项目,使用的是dubbo协议,他是不会携带前端传过来的Header的,所以去到其他服务是没办法从ThreadLocal中获取到的(可以做拦截器添加请求头,OpenFeign同理),其次是注入的时机,采用的方式也是通过request中的token(ticket)去redis中取值,具体如何写有很多方式,自己觉得哪个好用就用哪个(过滤器拦截器...)

四.必须要销毁吗?

        一般情况下,不需要手动销毁 ThreadLocal。Java 中的 ThreadLocal 在每个线程执行结束后会被自动清理,避免内存泄漏。但是,在某些特殊情况下,如果你在使用完 ThreadLocal 后不再需要其持有的值,可以通过调用 remove 方法手动清除对应线程的值,以帮助 JVM 更早地回收相关的资源,但这不是必须的。

相关推荐

  1. ThreadLocal何时注入?

    2024-04-08 12:44:04       16 阅读
  2. ThreadLocal

    2024-04-08 12:44:04       37 阅读
  3. ThreadLocal

    2024-04-08 12:44:04       20 阅读
  4. SpringMVC- ThreadLocal变量的注意

    2024-04-08 12:44:04       31 阅读
  5. ThreadLocal介绍

    2024-04-08 12:44:04       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 12:44:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 12:44:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 12:44:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 12:44:04       20 阅读

热门阅读

  1. python项目练习——18.文件加密和解密工具

    2024-04-08 12:44:04       16 阅读
  2. MySQL数据库下载安装教程(Windows&Linux)

    2024-04-08 12:44:04       15 阅读
  3. 06-User Login

    2024-04-08 12:44:04       15 阅读
  4. 设计模式面试题(九)

    2024-04-08 12:44:04       16 阅读
  5. Windows下Oracle表死锁处理过程

    2024-04-08 12:44:04       11 阅读
  6. SpringBoot表单防止重复提交

    2024-04-08 12:44:04       17 阅读
  7. uniapp 表单使用Uview校验 包括城市选择器

    2024-04-08 12:44:04       14 阅读