-
ThreadLocal是什么?
-
原理是什么?
-
使用场景?
-
为什么ThreadLocalMap中的Entity是extend弱引用
设计ThreadLocal的目的
-
在同一个线程中方法与方法,类与类之间共享内容传输
-
缺点:因为是以空间换时间,会占用一定内存,所有在使用完成后需要及时删除。
原理
-
java代码中使用线程是Thread类;
-
Thread中都有一个ThreadLocal.ThreadLocalMap threadLocals变量
-
当创建一个线程时(就是创建一个Thread对象),通过调用Thread t = Thread.currentThread();获得当前线程对象;
-
从而可以获得当前线程的threadLocals;
-
ThreadLocalMap中的key是Thread对象,value是要使用的对象。
思路:Thread -> ThreadLocal.ThreadLocalMap -> key:ThreadLocal对象,就是在代码中初始化的
使用场景
数据库连接、Session管理。
为什么ThreadLocalMap中的Entity是extend弱引用static class Entry extends WeakReference<ThreadLocal>?
个人理解:设成WeakReference是有原因的,当存储在Entity对象不再使用,但在系统编写中没有remove,如果是强引用,日积月累的多了就有可能outofmenbery了。弱引用的好处就是:当对象不再使用时,可以被gc。