ThreadLocal解析

简介: 这个类,好早就有了,JDK1.2就出现了。有时也会用一用,但他的作用是什么,很难表达了,难以表达,不能形成文字,说明了解的深度不够。

这个类,好早就有了,JDK1.2就出现了。有时也会用一用,但他的作用是什么,很难表达了,难以表达,不能形成文字,说明了解的深度不够。

ThreadLocal为解决多线程程序的并发问题提供了一种新的思路;

ThreadLocal的目的是为了解决多线程访问资源时的共享问题。

这基本上搜索到的threadlocal文章开头都是这样写的。

然,谎言说多了就成了真理。

但在JDK文档里面

该类提供了线程局部 (thread-local)变量。

这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。

ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。

ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。

ThreadLocal和多线程并发没有什么关系。ThreadLocal模式是为了解决单线程内的跨类跨方法调用的

ThreadLocal不是用来解决对象共享访问问题的,而是为了处理在多线程环境中,某个方法处理一个业务,需要递归依赖其他方法时,而要在这些方法中共享参数的问题。

例如有方法a(),在该方法中调用了方法b(),而在b方法中又调用了方法c(),即a–>b—>c,如果a,b,c都需要使用用户对象,那么我们常用做法就是a(User user)–>b(User user)—c(User user)。

但是如果使用ThreadLocal我们就可以用另外一种方式解决:

在某个接口中定义一个静态的ThreadLocal 对象,

例如 public static ThreadLocal threadLocal=new ThreadLocal ();

然后让a,b,c方法所在的类假设是类A,类B,类C都实现1中的接口

在调用a时,使用A.threadLocal.set(user) 把user对象放入ThreadLocal环境

这样我们在方法a,方法b,方法c可以在不用传参数的前提下,在方法体中使用threadLocal.get()方法就可以得到user对象。

上面的类A,类B ,类C就可以分别对应我们做web开发时的 web层的Action—>业务逻辑层的Service–>数据访问层的DAO,当我们要在这三层中共享参数时,那么我们就可以使用ThreadLocal 了。

目录
相关文章
|
5月前
|
存储 Java 中间件
《吊打面试官系列》从源码全面解析 ThreadLocal 关键字的来龙去脉
《吊打面试官系列》从源码全面解析 ThreadLocal 关键字的来龙去脉
|
2月前
|
缓存 前端开发 Java
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
42 1
|
9月前
|
Java
ThreadLocal全面解析
ThreadLocal全面解析
75 0
|
5月前
|
存储 Java 数据库连接
ThreadLocal的原理解析以及应用场景分析
ThreadLocal的原理解析以及应用场景分析 什么是ThreadLocal? ThreadLocal是Java中的一个线程管理工具,用于保证线程间数据的独立性。每个ThreadLocal对象可以存储一个线程局部变量,即对于同一个ThreadLocal对象,每个线程都有自己独立的变量。
|
10月前
|
存储 Java 数据安全/隐私保护
ThreadLocal的实现原理&源码解析
ThreadLocal是Java中的一个线程封闭机制,它提供了一种线程局部变量的解决方案,可以使每个线程都拥有自己独立的变量副本,互不干扰。
68 0
|
存储 算法 Java
ThreadLocal原理解析
ThreadLocal原理解析
80 1
ThreadLocal原理解析
|
存储 Java 索引
ThreadLocal原理解析(2):ThreadLocalMap源码解析
ThreadLocal原理解析(2):ThreadLocalMap源码解析
|
存储 Java Android开发
ThreadLocal原理解析(1):数据存取
ThreadLocal原理解析(1):数据存取
ThreadLocal原理解析(1):数据存取
|
存储 Java
ThreadLocal的使用及原理解析
JDK的lang包下提供了ThreadLocal类,我们可以使用它创建一个线程变量,线程变量的作用域仅在于此线程内
103 0
|
存储 安全 Java
ThreadLocal解析
JDK1.2 就这样了 ThreadLocal 为解决多种难题提供了一个新的思路; ThreadLocal的目的是为了解决多线程访问资源时的共享问题。 这原来是搜索到的线程本地的故事都是这样写的。 ,谎言说下去就形成了真理。 但在JDK文档里面
89 0
ThreadLocal解析

推荐镜像

更多