ThreadLocal原理,内存泄露到底是怎么回事,干货满满

ThreadLocal提供了线程局部变量,每个线程有自己的副本,实现数据隔离。它的内部使用WeakReference避免阻止垃圾回收,但过度使用或不恰当管理可能导致内存泄漏。理解何时调用remove()以防止内存问题至关重要。
摘要由CSDN通过智能技术生成

ThreadLocal原理(基础款)

ThreadLocal它提供了线程局部变量的功能。它的原理可以简单概括为以下几点:

  1. 每个Thread对象都维护了一个以ThreadLocal为键、任意类型对象为值的Map。这个Map存储了每个线程对应的局部变量值,这个Map叫做ThreadLocalMap。
  2. 当通过ThreadLocal对象调用set()方法设置变量值时,实际上是获取当前线程的ThreadLocalMap将当前ThreadLocal对象作为键,变量值作为值,存储到Map中。
scss复制代码    public void set(T value) {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null) {
            map.set(this, value);
        } else {
            createMap(t, value);
        }
    }

3. 当通过ThreadLocal对象调用get()方法获取变量值时,实际上是获取当前线程的ThreadLocalMap,再以以当前的ThreadLocal对象为键获取对应的值。

ini复制代码public T get() {
    Thread t = Thread.currentThread();
    ThreadLocalMap map = getMap(t);
    if (map != null) {
        ThreadLocalMap.Entry e = map.getEntry(this);
        if (e != null) {
            @SuppressWarnings(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值