ThreadLocal应用及理解
转载请注明出处:
1. 先展示threadLocal的一个简单封装,该封装用来在不同的请求线程中解析用户参数。在请求经过过滤器时,
对用户的信息进行设置入 ThreadLocalContext 中,可在同一个请求的不同业务中获取用户的信息参数。
import com.homepage.UserInfo;
public class ThreadLocalContext {
private static ThreadLocal<UserInfo> userThreadLocal = new ThreadLocal<>();
public static UserInfo getThreadLocalContext(){
UserInfo user = userThreadLocal.get();
if (user == null){
return new UserInfo();
}
return user;
}
public static void setUserThreadLocal(UserInfo user){
userThreadLocal.set(user);
}
public static void clear(){
userThreadLocal.remove();
}
}
以上为ThreadLocal的一个简单封装。
2. 使用的场景主要为:
- 每个线程需要有自己单独的实例
- 实例需要在多个方法中共享,但不希望被多线程共享
3.原理:
每个运行的线程都会有一个类型为ThreadLocal.ThreadLocalMap的map,这个map就是用来存储与这个线程绑定的变量,
map的key就是ThreadLocal对象,value就是线程正在执行的任务中的某个变量的包装类Entry。可以通过set方法来看threadLocal实现的原理:
/**
* Sets the current thread's copy of this thread-local variable
* to the specified value. Most subclasses will have no need to
* override this method, relying solely on the {@link #initialValue}
* method to set the values of thread-locals.
*
* @param value the value to be stored in the current thread's copy of
* this thread-local.
*/
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}
4.ThreadLocal作用:
在多线程程序中,同一个线程在某个时间段只能处理一个任务.我们希望在这个时间段内,任务的某些变量能够和处理它的线程进行绑定,
在任务需要使用这个变量的时候,这个变量能够方便的从线程中取出来.ThreadLocal能很好的满足这个需求,用ThreadLocal变量的程序看起来
也会简洁很多,因为减少了变量在程序中的传递。
ThreadLocalContext.clear() 方法或
ThreadLocalContext.set(null);
ThreadLocal应用及理解的更多相关文章
- 对ThreadLocal的一些理解
ThreadLocal也是在面试过程中经常被问到的,本文主要从以下三个方面来谈对ThreadLocal的一些理解: ThreadLocal用在什么地方 ThreadLocal一些细节 ThreadLo ...
- Java中ThreadLocal的深入理解
官方对ThreadLocal的描述: "该类提供了线程局部(thread-local)变量.这些变量不同于它们的普通对应物,因为访问某个变量(通过其get或set方法)的每个线程都有自己的局 ...
- ThreadLocal类的理解
首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的.各 ...
- 谈谈对ThreadLocal类的理解
源码中对于ThreadLocal类的解释是: /** * This class provides thread-local variables. These variables differ from ...
- ThreadLocal的简单理解
目录 一.背景 二.ThreadLocal解决的问题 三.如何创建一个ThreadLocal实例 四.ThreadLocal如何做到线程变量隔离 1.理解3个类 2.看下set方法是如何实现的 3.看 ...
- ThreadLocal()理解
在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序. 当使用 ...
- Android开发之ThreadLocal原理深入理解
[Android]ThreadLocal的定义和用途 ThreadLocal用于实现在不同的线程中存储线程私有数据的类.在多线程的环境中,当多个线程需要对某个变量进行频繁操作,同时各个线程间不需要同步 ...
- 理解ThreadLocal(之二)
想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理.首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码 ...
- 正确理解ThreadLocal
想必很多朋友对 ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理.首先,本文先谈一下对ThreadLocal的理 解,然后根据ThreadLocal类的 ...
- ThreadLocal深入理解一
转载:http://www.cnblogs.com/dolphin0520/p/3920407.html 想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使 ...
随机推荐
- SpringBoot整合JavaMail
1.发送简单邮件 导入依赖 implementation 'org.springframework.boot:spring-boot-starter-mail:3.0.2' 开启相关协议,获取密码~ ...
- 基于LSTM的股票价格预测模型【附源码】
导语 本文介绍了LSTM的相关内容和在股票价格预测上的应用. LSTM的股票价格预测 LSTM(Long Short Term Memory)是一种 特殊的RNN类型,同其他的RNNs相比可以更加方便 ...
- 解密数据可视化软件、BI软件和数字孪生软件的不同
在现代企业和科技领域,数据起着至关重要的作用.为了更好地管理和理解数据,不同类型的软件工具应运而生,其中包括数据可视化软件.BI(Business Intelligence)软件和数字孪生软件.虽然它 ...
- 【Python】【OpenCV】轮廓检测
Code: 1 import cv2 2 import numpy as np 3 4 img = np.zeros((200, 200), dtype=np.uint8) 5 img[50:150, ...
- 实现两个 JSON 对象的对比
问题描述 在 Java 中,对于两个对象的对比,如果没有重写 equals 方法,那么将会默认使用 Object 默认的 equals 方法来比较两个对象.这种比较方式是通过比较两个对象的内存地址是否 ...
- Java 并发编程(六)并发容器和框架
传统 Map 的局限性 HashMap JDK 1.7 的 HashMap JDK 1.7 中 HashMap 的实现只是单纯的 "数组 + 链表 " 的组合方式,具体的组成如下: ...
- 干掉PPT!现场编码的职级晋升答辩你参加过么?
摘要:研发讲究的是真本事,是骡子是马咱们还得代码上见真章. 最近这小半年的时间,凭借对各种API的巧妙应用,我从一个差点被淘汰的"前浪"变成了公司人人尊敬的技术委员会副主席,工作思 ...
- Hudi自带工具DeltaStreamer的实时入湖最佳实践
摘要:本文介绍如何使用Hudi自带入湖工具DeltaStreamer进行数据的实时入湖. 本文分享自华为云社区<华为FusionInsight MRS实战 - Hudi实时入湖之DeltaStr ...
- 带你上手全新版本的Webpack 5
摘要:webpack5快速入门,船新版本,建议收藏 本文分享自华为云社区<webpack5快速入门,船新版本,建议收藏>,作者:北极光之夜.. 一. 快速上手 1.1 Webpack功能: ...
- 应用开发专家一席谈:开发低代码,上手低门槛,AppCube使能Citizen Developer,人人都是开发者
摘要:让不确定因子变为确定性因子,把复杂留给平台,简单留给开发者,是软件开发效率改进一直努力的方向,也是低代码理念的来源. 本文分享自华为云社区<应用开发专家一席谈:开发低代码,上手低门槛,Ap ...