参考小端有话说,侵改;
定义
每个线程,都会有一个Map(ThreadLocal.ThreadLocalMap),用来存储以我们定义的ThreadLocal对象为key,以我们自定义的值为value的名值对。以此机制,保证了多线程间该变量值的隔离。
结论
同步与ThreadLocal是解决多线程中数据访问问题的两种思路,前者是数据共享的思路,后者是数据隔离的思路
扩展:内存泄漏问题。
ThreadLocal对象是弱引用。在GC时,会直接回收。这种情况下,Map中的key为null,value值还在,无法得到及时的释放。目前的策略是在调用get、set、remove等方法时,会启动回收这些值。但是如果一直没调用呢?嗯,很容易就导致内存泄漏了。当然,并不能因为此就认为是弱引用导致的内存泄露,而应该是,设计的这个变量存储机制,导致了泄露。所以在使用的时候,要及时释放。