关于java:ThreadLocalT之我见

3次阅读

共计 581 个字符,预计需要花费 2 分钟才能阅读完成。

1. 咱们在进行表创立的时候通常会创立出一条批改人与创建人的数据, 能够很不便的看出有谁批改了数据库. 那这条数据要通过怎么的代码去实时实现呢, 能够通过 ThreadLocal 技术, 当咱们应用 token 去定义拦截器的时候, 前端页面中会携带一个 token 数据, 能够通过 token 数据实时的去获取以后用户的 id, 而后能够放入线程中, 在须要应用的中央应用办法去获取.
ThreadLocal 并不是一个 Thread,而是 Thread 的局部变量.ThreadLocal 为每个线程提供独自一份存储空间,具备线程隔离的成果,只有在线程内能力获取到对应的值,线程外则不能拜访。
ThreadLocal 有三个办法是咱们罕用的, 别离是
public void set(T value) 设置以后线程的线程局部变量的值
public T get() 返回以后线程所对应的线程局部变量的值
public void remove() 移除以后线程的线程局部变量

2. 存在内存透露问题吗?
在 ThreadLocal 的动态外部类 ThreadLocalMap 中, 援用 ThreadLocal 的 key 为弱援用, 而 value 为强援用, 因而可能呈现 key 值被回收而 value 依然存在的状况, 即 key 为 null, 这样的话 value 始终不会被回收掉, 从而会造成内存透露.
怎么解决?
能够在应用完 ThreadLocal 后应用 remove 办法开释掉资源.

正文完
 0