ThreadLocal是一种基于空间换时间的思想运用,为了解决在多线程环境下单线程共享变量安全的问题。
原理:每个线程通过ThreadLocal.ThreadLocalMap保存当前线程中ThreadLocal的key和值,相当于每个线程有各自的变量副本,线程共享这些变量数据,互不影响。
可能出现内存泄露
线程池中的线程是可能存在复用的线程,总是不销毁,内存会越来越大。
在线程池环境下,由于线程是一直运行且复用的,使用ThreadLocal时会出现这个任务看到上个任务ThreadLocal变量值以及内存泄露等问题,解决方法就是在当前任务执行完后将ThreadLocal变量remove或设置为初始值,类似在Struts2 框架中Filter里的处理方法。