首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

ThreadLocal

ThreadLocal ThreadLocal ThreadLocal是什么 ThreadLocal是一个本地线程副本变量工具类。...Map里面存储线程本地对象(key)和线程的变量副本(value) 但是,Thread内部的Map是由ThreadLocal维护的,由ThreadLocal负责向map获取和设置线程的变量值 所以对于不同的线程...则效率很低 所以这里引出的良好建议是:每个线程只存一个变量,这样的话所有的线程存放到map中的Key都是相同的ThreadLocal,如果一个线程要保存多个变量,就需要创建多个ThreadLocal,...如果使用ThreadLocal的set方法之后,没有显示的调用remove方法,就有可能发生内存泄露,所以养成良好的编程习惯十分重要,使用完ThreadLocal之后,记得调用remove方法。...总结 每个ThreadLocal只能保存一个变量副本,如果想要上线一个线程能够保存多个副本以上,就需要创建多个ThreadLocal

66420

ThreadLocal

直接使 ThreadLocal的特点 线程并发:多线程并发的场景。 传递数据:ThreadLocal在同一线程,不同方法中传递公共变量。...所以ThreadLocal使得程序拥有更高并发性 ThreadLocal内部结构 JDK8之前,ThreadLocal自己维护一个全局ThreadLocalMap,key存储每一个Thread,Value...JDK8 ThreadLocal:每一个线程维护(拥有)一个ThreadLocalMap。这个Map集合的key是ThreadLocal本身,value,才是存储的Object。...该变量包含了一个Entry数组,该数组真正保存了ThreadLocal类set的数据。Entry是由threadLocal和value组成。...图片 ThreadLocal对象画到了堆上,其实在实际的业务场景中不一定在堆上。因为如果ThreadLocal被定义成了static的,ThreadLocal的对象是类共用的,可能出现在方法区。

25520

ThreadLocal解析

ThreadLocal为解决多线程程序的并发问题提供了一种新的思路; ThreadLocal的目的是为了解决多线程访问资源时的共享问题。 这基本上搜索到的threadlocal文章开头都是这样写的。...但是如果使用ThreadLocal我们就可以用另外一种方式解决: 在某个接口中定义一个静态的ThreadLocal 对象, 例如 public static ThreadLocal threadLocal...=new ThreadLocal (); 然后让a,b,c方法所在的类假设是类A,类B,类C都实现1中的接口 在调用a时,使用A.threadLocal.set(user) 把user对象放入ThreadLocal...所以JDK建议将ThreadLocal变量定义成private static的, 这样的话ThreadLocal的生命周期就更长,由于一直存在ThreadLocal的强引用,所以ThreadLocal也就不会被回收...key 使用弱引用:引用的ThreadLocal的对象被回收了,由于ThreadLocalMap持有ThreadLocal的弱引用,即使没有手动删除,ThreadLocal也会被回收。

33120

浅谈ThreadLocal

ThreadLocal是为了避免共享, 避免锁竞争, 使用了空间换时间的思路 若使用Map, Thread做Key, 则回到了问题本身, 仍会发生锁竞争, 降低效率 所以数据实际上是存储在java.lang.Thread...#threadLocals的 ThreadLocal相当于一个钥匙/桥梁去访问Thread内的数据 Q1: 为什么ThreadLocalMap中Entry的Key (ThreadLocal) 要设置成弱引用...如果ThreadLocal使用完了, 但是Entry的key仍引用着该对象, 会造成内存泄漏 Q2: 为什么ThreadLocalMap中Entry的Value (实际存储的对象) 不设置成弱引用 如果发生...GC就将该对象回收, 那么会造成系统异常, 用户仍然可能使用这个值 如果key (ThreadLocal) 被回收了, value仍然存在, 就会造成内存泄漏, 所以需要每次使用完成后手动调用remove...ThreadLocal也会在查找Entry或Map扩容的时候清除无用的Entry (Key为null), 一定程度上避免内存泄漏 父子线程中如何共享数据 Thread内Thread#inheritableThreadLocals

26000
领券