什么是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