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 里面是最合适的。

 

 

 

 

 

相关文章
|
12月前
|
存储 安全 Java
【ThreadLocal】
【ThreadLocal】
|
2月前
|
Java 测试技术 索引
ThreadLocal详解
文章详细讨论了Java中的`ThreadLocal`,包括它的基本使用、定义、内部数据结构`ThreadLocalMap`、主要方法(set、get、remove)的源码解析,以及内存泄漏问题和避免策略。`ThreadLocal`提供了线程局部变量,确保多线程环境下各线程变量的独立性,但不当使用可能导致内存泄漏,因此建议在不再需要`ThreadLocal`变量时调用其`remove`方法。
76 2
ThreadLocal详解
|
5月前
|
存储 Java 数据管理
ThreadLocal的使用
`ThreadLocal`是Java中的线程局部变量工具,确保每个线程都有自己的变量副本,互不干扰。适用于保持线程安全性数据和跨方法共享数据。基本用法包括创建实例、设置和获取值以及清除值。例如,创建ThreadLocal对象后,使用`.set()`设置值,`.get()`获取值,`.remove()`清除值。注意ThreadLocal可能引起内存泄漏,应适时清理,并谨慎使用以避免影响代码可读性和线程安全性。它是多线程编程中实现线程局部数据管理的有效手段。
79 10
|
5月前
|
存储 Java
ThreadLocal 有什么用
ThreadLocal 有什么用
46 0
|
Java
ThreadLocal笔记
ThreadLocal笔记
194 0
ThreadLocal笔记
|
存储 前端开发 Java
ThreadLocal学习笔记(一)
ThreadLocal学习笔记(一)
ThreadLocal学习笔记(一)
|
存储 分布式计算 安全
什么是ThreadLocal?
这篇文章是慕课网上一门免费课程《ThreadLocal》的观后总结。这门课将ThreadLocal讲得非常清晰易懂,又深入底层原理和设计思想,是我看过的最好的ThreadLocal的资料,现在把用自己的话,把它整理成文字版本。 总共预计产出四篇文章,这是第一篇。
255 3
|
存储 安全 Java
ThreadLocal 使用详解
ThreadLocal 是线程本地变量。当使用 ThreadLocal 维护变量时,ThreadLocal 为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程
530 0
|
存储 Java
ThreadLocal相关使用
ThreadLocal相关使用
186 0
ThreadLocal相关使用
|
存储 Java API
【学习笔记】深入理解ThreadLocal(1)
【学习笔记】深入理解ThreadLocal
100 0
【学习笔记】深入理解ThreadLocal(1)