set

Thread.currentThread.map(ThreadLocal, T)
设到了当前线程的map中

为什么使用Entry extends WeakReference

  1. ThreadLocal<M> tl = new ThreadLocal<>();
  2. tl.set(new M());
  3. tl.remove();

若是强引用,即使 tl = null,但key的引用依然指向ThreadLocal对象,所以会有内存泄漏,而弱引用不会。
但还是会有内存泄露,ThreadLocal被回收,key值变成null,导致整个value再也无法被访问到,因此存在内存泄露,所以最后要remove()

使用

不用时要remove()掉,不然会有内存泄漏

用途

声明式事务,保证同一个Connection