Java并发编程:深入剖析ThreadLocal

 什么是ThreadLocal?

 字面理解的意思是:线程本地变量,

 【我的理解意思是:一个线程内部的变量,仅供这个线程使用,以线程为单位(理解的应该是没有错误)】

 

 (How) 怎样使用ThreadLocal?

 先阅读一下代码,代码能顺利跑完之后,分析结果,然后在分析Threadlocal 内部原理

package Test_1;

import java.util.HashMap;
import java.util.Map;

/**
 * @Description: //TODO  threadLocal 真正的原理是:为每个线程创建一个副本,K-threadlocal 
 * ,value-->就是要赋给的值
 *  代码原理:主线程赋值,然后输出,增加一个线程赋值,然后输出,然后在输出主线程的值,发现主线的 
 *  值是不变的。-----》得出结论是: 为每个线程都创建一个副本,K-V 形式,主要是通过线程去找到 
  *  value;
 * @Author: sunfch
 * @Date: 2019/1/6 18:36
 * @Param:
 * @Return:
 */
public class ThrealLocal_study {

    public static ThreadLocal<Map<String, String>> threadLocal = new ThreadLocal<>();

    public void setvalue() {
        Map<String, String> param = new HashMap<>();
        param.put("sunf", "sunfch");
        param.put("threadName", Thread.currentThread().getName());
        threadLocal.set(param);
    }

    public static void main(String[] args) {
        ThrealLocal_study study = new ThrealLocal_study();
        study.setvalue();
        Map<String, String> result = threadLocal.get();
        System.out.println(result.toString());

        new Thread(new Runnable() {
            ThrealLocal_study threalLocal_study = new ThrealLocal_study();

            @Override
            public void run() {
                threalLocal_study.setvalue();
                Map result1 = threadLocal.get();
                System.out.println(result1.toString());
            }
        }).start();


        Map result3 = threadLocal.get();
        System.out.println("从主线程获得的数据是====>" + result3.toString());

    }
    
}

运行后的结果结果

 

 

(why) 为什么结果会是这样,原理是什么?

这个就需要查看threadlocal源码了

 

 

应用场景是什么?

 

 

 

若有不对之处,请大家指正!

最后附上大神的链接:https://www.cnblogs.com/dolphin0520/p/3920407.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值