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.pngThreadLocal 的操作里面在开发之中保存最多的往往是数据库的连接对象,因为在几乎业务层、数据层也好都可能使用到这种数据库的连接对象,所以将这种对象保存在 ThreadLocal 里面是最合适的。

 

 

 

 

 

相关文章
|
3月前
|
存储 Java
ThreadLocal 有什么用
ThreadLocal 有什么用
21 0
|
4月前
|
存储
ThreadLocal
ThreadLocal
26 0
|
8月前
|
存储 算法 安全
深入详解ThreadLocal
在我们日常的并发编程中,有一种神奇的机制在静悄悄地为我们解决着各种看似棘手的问题,它就是 ThreadLocal 。
21416 9
深入详解ThreadLocal
|
10月前
|
存储 Java
|
Java
ThreadLocal笔记
ThreadLocal笔记
152 0
ThreadLocal笔记
|
存储 安全 Java
ThreadLocal 使用详解
ThreadLocal 是线程本地变量。当使用 ThreadLocal 维护变量时,ThreadLocal 为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程
456 0
|
存储 前端开发 Java
ThreadLocal学习笔记(一)
ThreadLocal学习笔记(一)
ThreadLocal学习笔记(一)
|
存储 Java
ThreadLocal理解
ThreadLocal理解
248 0
ThreadLocal理解
【学习笔记】深入理解ThreadLocal(2)
【学习笔记】深入理解ThreadLocal
106 0
【学习笔记】深入理解ThreadLocal(2)
|
存储 Java API
【学习笔记】深入理解ThreadLocal(1)
【学习笔记】深入理解ThreadLocal
86 0
【学习笔记】深入理解ThreadLocal(1)