ThreadLocal | 学习笔记-阿里云开发者社区

开发者社区> 学堂小助手> 正文

ThreadLocal | 学习笔记

简介: 快速学习 ThreadLocal。
+关注继续查看

开发者学堂课程【Java 面试疑难点串讲1:面试技巧及语言基础:this 关键字】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/24/detail/494


ThreadLocal


内容介绍

一、ThreadLocal


一、ThreadLocal

在整个 Java 之中引用传递是一个核心的问题,也就是说几乎所有的问题都可能卡在引用传递上。

例如:反射机制里面如果采用反射进行对象实例化,则要求类中要提供有无参构造方法。

如果你没有无参构造,那么就必须明确的传递一个参数(可能是各种类型)。你不得不去面对 Constructor 的操作形式。

范例:问题引出

class Message { //简单Java类,本质在于进行数据的包装

private String info ;

public Message(String info) {

this.info = info ;

}

public String getInfo() {

return info;

}

}

class Send {

public void set(Message msg) { //基础的引用传递

System.out.println(msg.getInfo());

}

}

public class TestDemo {

public static void main(String[] args) {

Message temp = new Message("您吃了么?") ;

new Send( ).set(temp);

}

}

整个过程之中属于一个最基础的引用传递。但是一个新的思考出现了。要求 Send 类中的 set() 方法里面不接收 Message 类对象,但是还要求可以传递 Message 。
于是有人想到,采用一个中间过渡处理,设置一个 static 属性操作。

class Message { //简单Java类,本质在于进行数据的包装

private String info ;

public Message(String info) {

this.info = info ;

}

public String getInfo( ) {

return info;

}

class Send {

public void set() { //基础的引用传递

Message msg = Factory.message ; //对象怎么来的自己想System.out.println(msg.getInfo());

}

class Factory {

public static Message message ;

public class TestDemo {

public static void main(String[] args) {

Message temp = new Message("您吃了么?") ;//准备对象Factory.message = temp ;

new Send().set();  //发送

}

但是现在一个问题: java 是多线程了, static 保存的是全局数据区,属于公共的数据处理。但是这种操作在多线程处理中就会出现数据不同步的问题了。那么最好的做法是在可以保存数据基础上再多保存一个当前线程对象。

 p.png

而这种操作就属于 ThreadLocal 类的作用,也就是说 ThreadLocal 在每一次设置内容的时候都会保存有一个当前的线程对象。pp.png在 ThreadLocal 的操作里面在开发之中保存最多的往往是数据库的连接对象,因为在几乎业务层、数据层也好都可能使用到这种数据库的连接对象,所以将这种对象保存在 ThreadLocal 里面是最合适的。

 

 

 

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
计算机基础2 | 学习笔记
快速学习计算机基础2。
11 0
计算机基础1 | 学习笔记
快速学习计算机基础1。
9 0
计算机基础3 | 学习笔记
快速学习计算机基础3。
10 0
Linux 命令执行过程 | 学习笔记
快速学习 Linux 命令执行过程。
9 0
PG+MySQL第9课-实时精准营销
通常业务场景会涉及基于标签条件圈选目标客户、基于用户特征值扩选相似人群、群体用户画像分析这些技术,本文将围绕这三个场景去介绍在实施精准营销里面的PG数据库的使用
8 0
冬季实战营第一期:从零到一上手玩转云服务器
一、1月17日 动手实战-初识上云基础,动手实操ECS云服务器新手上路 这个实验我就不多说了,就是熟悉控制台,没啥,搜索需要的服务等,真没啥好说的
12 0
冬季实战营第一期学习报告
通过五天学习与实操,对ECS云服务器入门、快速搭建LAMP环境、部署MySQL数据库、回顾搭建Docker环境和Spring Boot以及使用PolarDB和ECS搭建门户网站操作,对本期学习与实操的认识。
9 0
Java classloader详解
Java程序并不是一个可执行文件,而是由很多的Java类组成,其运行是由JVM来控制的。而JVM从内存中查找到类,而真正将类加载进内存的就是ClassLoader,可以说我们每天都在接触ClassLoader,但是很多时候我们没有明白其执行的流程和原理。
8 0
MySQL高可用架构演进
MySQL是数据库领域当之无愧的霸主之一,其在各行各业被广泛应用,随着广泛使用,对于MySQL本身的高可用性的要求就是不可避免的话题,而MySQL的高可用方案也随着MySQL功能的完善经历了多次升级,本文将对MySQL的各种高可用架构进行分析,以此来了解架构的演进。
11 0
系统安装前准备 | 学习笔记
快速学习系统安装前准备。
7 0
1151
文章
0
问答
来源圈子
更多
技术图谱:由专家组参与技术图谱的绘制与编写,知识与实践的结合让开发者们掌握学习路线与逻辑,快速提升技能 电子书:电子书由阿里内外专家打造,供开发者们下载学习,更与课程相结合,使用户更易理解掌握课程内容 训练营:学习训练营 深入浅出,专家授课,带领开发者们快速上云 精品课程:汇集知识碎片,解决技术难题,体系化学习场景,深入浅出,易于理解 技能自测:提供免费测试,摸底自查 体验实验室:学完即练,云资源免费使用
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载