ThreadLocal 的主要目的是用来实现多线程环境下的变量隔离
- 【解释】即每个线程自己用自己的资源,这样就不会出现共享,没有共享,就不会有多线程竞争的问题
原理
- 每个线程对象内部有一个 ThreadLocalMap,它用来存储这些需要线程隔离的资源
- 资源的种类有很多,比如说数据库连接对象、比如说用来判断身份的用户对象 ...
- 怎么区分它们呢,就是通过 ThreadLocal,它作为 ThreadLocalMap 的 key,而真正要线程隔离的资源作为 ThreadLocalMap 的 value
- ThreadLocal.set 就是把 ThreadLocal 自己作为 key,隔离资源作为值,存入当前线程的 ThreadLocalMap
- ThreadLocal.get 就是把 ThreadLocal 自己作为 key,到当前线程的 ThreadLocalMap 中去查找隔离资源
- ThreadLocal 一定要记得用完之后调用 remove() 清空资源,避免内存泄漏