线程局部变量ThreadLocal(2)

1.父子线程实现数据共享

父子线程共享数据指的是在父线程中向ThreadLocal中存入了数据可以在子线程中从ThreadLocal中获取到。

public class Demo03 {
    public static void main(String[] args) {
//        继承自ThreadLocal,get()方法得到的是父类的值
        InheritableThreadLocal<String> threadLocal=new InheritableThreadLocal<String>();
//        主线程存值
        threadLocal.set("天王盖地虎");
//        取值
        System.out.println("主线程:"+threadLocal.get());
        //创建并启动了子线程
        Thread thread=new Thread(new Runnable() {
            @Override
            public void run() {
//                子线程取值
                System.out.println("子线程:"+threadLocal.get());
            }
        });
        thread.start();
    }
}

 InheritableThreadLocal是ThreadLocal的子类,该对象调用get()方法得到的值是父类的值。


2.ThreadLocal避免内存泄露的方式

内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

使用try.catch .finally 在finally中调用remove方法清楚没用的数据,防止数据一直占用内存。

3.应用场景

3.1线程数据隔离

ThreadLocal中的数据只属于当前线程,对其他线程是不可见的,可以有效防止当前线程的数据被其他线程修改。同时,各线程之间的数据相互隔离,避免了加同同步锁带来的性能损失,大大提升了并发性能。

3.2跨函数传递

同一个线程内的数据使用ThreadLocal而不是用返回值和承诺书进行数据传送,降低了耦合度。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值