- ThreadLocal的副作用
1 脏数据
线程复用会产生脏数据。由于线程池会重用Thread 对象,那么于Thread 绑定的类的静态属性ThreadLocal 对象也会被重用。那么如果在实现的方法中不显示的调用remove() 清理与线程相关的ThreadLocal对象,那么如果下一个线程不调用set() 设置初始值,就可能get() 到线程重用的信息。产生脏数据。
2 内存泄露
在源码注释中提示使用static 关键字来修饰ThreadLocal。因此执行完成后如果不进行remove() 操作,那么线程执行完成后,通过ThreadLocal对象持有的对象是不会被释放的。可能引起OOM。
参考:
1 彻底理解ThreadLocal