ThreadLocal之我见

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方法释放掉资源.

你可能感兴趣的:(java)