Threadlocal示意图
示意图
每个Thread中有个变量threadlocal是一个ThreadlocalMap类型
ThreadlocalMap 中的key是threadlocal引用,value就是我们存的值。
Threadlocal中的方法
protected Object initialValue()
void set(Object value)
public Object get()
public void remove()
protected Object initialValue()
存在内存泄露的原因
当threadlocal没回收以后原来的key就指向null,value还在但是没有实际的作用(内存泄漏)。所以需要调用set,get,remove将key为null的删除。
Threadlocal实际场景
Spring的事务就借助了ThreadLocal类。Spring会从数据库连接池中获得一个connection,然会把connection放进ThreadLocal中,也就和线程绑定了,事务需要提交或者回滚,只要从ThreadLocal中拿到connection进行操作。
网友评论