2022
06-10
06-10
java中ThreadLocal的基本原理
目录基本流程ThreadLoalMap数据结构Hash冲突及解决ThreadLocal内存泄露内存引用链路引用类型为什么使用弱引用而不是强引用?泄露原因分析ThreadLocal应用场景源码实现一个线程内可以存多个ThreadLocal对象,存储的位置位于Thread的ThreadLocal.ThreadLocalMap变量,在Thread中有如下变量:/*ThreadLocalvaluespertainingtothisthread.Thismapismaintained*bytheThreadLocalclass.*/ThreadLocal.ThreadLocalMap...
继续阅读 >
如果说ThreadLocal的话,那肯定就会涉及到内存泄漏,为啥嘞因为吧啦吧啦~ThreadLocal解决了什么问题呢?它是为了解决对象不能被多线程共享访问的问题,通过threadLocal.set()方法将对象实例保存在每个线程自己所拥有的threadLocalMap中,这样的话每个线程都使用自己的对象实例,彼此不会影响从而达到了隔离的作用,这样就解决了对象在被共享访问时带来的线程安全问题。啥意思呢?打个比方,现在公司所有人都要填写...
ThreadLocalThreadLocal适用于变量在线程间隔离,而在方法或类间共享的场景。代码@RestControllerpublicclassThreadLocalController{privatestaticfinalThreadLocal<String>currentUid=ThreadLocal.withInitial(()->null);@GetMapping("bad")publicMapdoBad(@RequestParam("uid")Stringuid){Stringbefore=currentUid.get();currentUid.set(uid);Stringafter=currentUid.get();Mapre...