ThreadLocal学习笔记

ThreadLocal类图

                         ThreadLocal
                             /
                  InheritableThreadLocal
                      /                  \
 TransmittableThreadLocal(阿里巴巴)      TransmissibleThreadLocal(阿里巴巴)

  1. ThreadLocal

    1. 这是Thread类的局部变量,每个线程私有。

    2. 它主要用于解决多线程中的数据共享问题,保证线程安全。

    3. 每个线程都可以修改自己的变量副本,而不会影响其他线程的变量副本。

    4. 它为每个线程提供了一个独立的变量副本。

  2. InheritableThreadLocal

    • 这是ThreadLocal的子类,它继承了ThreadLocal的所有特性。
    • 除此之外,它还允许子线程继承父线程的线程局部变量值。可用于父子线程传递数据。
    • 局限:不能在线程池环境下使用
  3. TransmittableThreadLocal 和 TransmissibleThreadLocal

    • 是阿里巴巴提供的为解决跨线程上下文的InheritThreadLocal的子类,引入holder来保存需要在线程间传递的变量。

    • 可跨线程、跨线程池。

使用ThreadLocal的场景

ThreadLocal可以保存每个线程独有的对象,因此,在需要线程隔离的场景下会经常用到ThreadLocal。

数据库连接和Session管理:ThreadLocal可以帮助管理和维护数据库连接和维持会话状态,避免出现线程安全问题。

全局存储用户信息:ThreadLocal可以全局存储用户信息,避免方法调用过程传递用户信息。

替代参数显式传递:如用户信息、上下文信息Context,使用ThreadLocal可以避免显式传递这些“背景”信息,从而让代码更加聚焦在业务功能上。

记录日志:使用ThreadLocal记录日志信息,以便跟踪程序的执行过程。

事务操作:ThreadLocal可以用于管理事务,在使用Spring框架时。通过在ThreadLocal中存储事务信息,可以确保每个线程都有自己的事务上下文,从而避免线程之间的事务冲突和数据竞争。

性能监控:ThreadLocal可以记录每个步骤执行花费的开销。

缓存管理:线程将执行过程中间结果缓存。

注意:ThreadLocal使用完要remove(),避免出现内存泄漏问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/355282.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo框架注册中心-Zookeeper搭建

Dubbo 是阿里巴巴公司开源的高性能、轻量级的Java RPC框架,致力于提供高性能。 Dubbo官网 本篇开始dubbo的第一篇,注册中心 ZooKeeper 环境搭建。 环境前置:由于Zookeeper是基于Java环境,必须安装有JDK。查看命令 java -version。…

【Redis】Redis有哪些适合的场景

🍎个人博客:个人主页 🏆个人专栏:Redis ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 (1)会话缓存(Session Cache) (2)全页缓存(FPC…

Element-Plus如何实现表单校验和表单重置

一&#xff1a;页面布局介绍&#xff1a; 这是我刚刚用基于vue3element-plus写好的一个部门管理的页面 基本的增删改查已经写好&#xff0c;下面我只提供页面的template和style的代码&#xff1a; template <template><el-card class"box-card"><…

【Javaweb程序设计】【C00165】基于SSM的高考志愿辅助填报系统(论文+PPT)

基于SSM的高考志愿辅助填报系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的高考志愿辅助填报系统 本系统分为前台系统模块、后台管理员模块以及后台学生模块 前台系统模块&#xff1a;当游客打开系统的网址后&…

CMMI、SPCA、CSMM,三种认证的差异有哪些?

在当今的企业环境中&#xff0c;体系认证已经成为了一个重要的议题。其中&#xff0c;CMMI、SPCA和CSMM是三种广泛使用的认证&#xff0c;它们在各自领域内具有特定的目标和要求&#xff0c;今天擎标就带大家了解一下这三种认证之间的差异。 CMMI、CSMM和SPCA分别是什么 1、C…

[BUUCTF]-PWN:pwnable_hacknote解析

先看保护 32位&#xff0c;没开pie&#xff0c;got表可修改 看ida 总的来说就是alloc创建堆块&#xff0c;free释放堆块&#xff0c;show打印堆块内容 但alloc处的函数比较特别&#xff0c;他会先申请一个0x8大小的堆来存放与puts相关的指针 完整exp&#xff1a; from pwn …

Qt6入门教程 13:QPushButton

目录 一.QPushButton 1.多选 2.互斥 3.设置菜单 4.图标按钮 4.1给按钮添加图标 4.2异形按钮 二.设置Qt样式表 一.QPushButton QPushButton是与QAbstractButton最接近的完全体按钮&#xff0c;它具备QAbstractButton的所有特性&#xff0c;并且支持设置菜单。 1.多选 …

【GAMES101】Lecture 09 纹理贴图 点查询与范围查询 Mipmap

目录 纹理贴图 纹理放大-双线性插值 点采样纹理所带来的问题 Mipmap 各向异性过滤 纹理贴图 我们在之前的着色里面说过如何给物体上纹理&#xff0c;就是对于已经光栅化的屏幕点&#xff0c;就是每个像素的中心&#xff0c;去寻找对应纹理的映射位置的纹理颜色&#xff0…

代码随想录刷题笔记-Day13

1. 二叉树的层序遍历 102. 二叉树的层序遍历https://leetcode.cn/problems/binary-tree-level-order-traversal/层次遍历依靠队列的先进先出特点实现。 解题思路 层序遍历的本质就是对每一个pop出来的处理节点&#xff0c;处理后把他的左右节点放进去。 对于每一层来说&…

【JavaScript 基础入门】01 编程语言和计算机基础

编程语言和计算机基础 目录 编程语言和计算机基础1 - 编程语言1.1 编程1.2 计算机语言1.3 编程语言1.4 翻译器1.5 编程语言和标记语言区别1.6 总结 2 - 计算机基础2.1 计算机组成2.2 数据存储2.3 数据存储单位2.4 程序运行 1 - 编程语言 1.1 编程 编程&#xff1a; 就是让计算…

BGP:03 BGP路由

这是实验拓扑&#xff0c;IBGP 利用环回口建立邻居&#xff0c;IGP 协议为 OSPF&#xff0c; EBGP 通过物理接口建立邻居 基本配置&#xff1a; R1: sys sysname R1 int loop 0 ip add 1.1.1.1 24 int g0/0/0 ip add 192.168.12.1 24 qR2: sys sysname R2 int loop 0 ip ad…

SpringMvc切换Json转换工具

SpringBoot切换使用goolge的Gson作为SpringMvc的Json转换工具 <!-- gson依赖 --> <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId> </dependency>Configuration public class JsonWebConfig {B…

【MATLAB第92期】基于MATLAB的集成聚合多输入单输出回归预测方法(LSBoost、Bag)含自动优化超参数和特征敏感性分析功能

【MATLAB第92期】基于MATLAB的集成聚合多输入单输出回归预测方法&#xff08;LSBoost、Bag&#xff09;含自动优化超参数和特征敏感性分析功能 本文展示多种非常用多输入单输出回归预测模型效果。 注&#xff1a;每次运行数据训练集测试集为随机&#xff0c;故对比不严谨&…

PR新年模板|2024龙年新春祝福PR片头模板视频素材

2024龙年新春祝福视频开场PR片头模板剪辑素材mogrt下载。 软件支持Premiere Pro 2023或更高版本&#xff1b; 在Premiere Pro&#xff08;mogrt&#xff09;中使用基本图形面板更改所有设置&#xff1b; 高清19201080分辨率&#xff1b;可以更改文字&#xff0c;调整背景颜色&a…

【动态规划】【字符串】【行程码】1531. 压缩字符串

作者推荐 视频算法专题 本文涉及知识点 动态规划汇总 LeetCode 1531. 压缩字符串 II 行程长度编码 是一种常用的字符串压缩方法&#xff0c;它将连续的相同字符&#xff08;重复 2 次或更多次&#xff09;替换为字符和表示字符计数的数字&#xff08;行程长度&#xff09;…

带libc源码gdb动态调试(导入glibc库使得可执行文件动态调试时可看见调用库函数源码)

文章目录 查看源码是否编译时有-g调试信息和符号表在 gdb 中加载 debug 文件/符号表将 debug 文件放入 ".debug" 文件夹通过 gdb 命令 set debug-file-directory directories GCC的gcc和g区别指定gcc/g&#xff0c;glibc的版本进行编译指定gcc/g的版本指定glibc的和l…

数字图像处理(实践篇)三十二 OpenCV-Python比较两张图片的差异

目录 一 方案 二 实践 ​通过计算两张图像像素值的均方误差(MSE)来比较两张图像。差异大的两张图片具有较大的均方差值,相反,相似的图片间则具有较小的均方差值。需要注意的是。待比较的两张图像要具有相同的高度、宽度和通道数。 一 方案 ①导入依赖库 import cv2 import…

QWT开源库使用

源代码地址&#xff1a;Qwt Users Guide: Qwt - Qt Widgets for Technical Applications Qwt库包含GUI组件和实用程序类&#xff0c;它们主要用于具有技术背景的程序。除了2D图的框架外&#xff0c;它还提供刻度&#xff0c;滑块&#xff0c;刻度盘&#xff0c;指南针&#xf…

【遥感专题系列】影像信息提取之—— 土地利用数据监督与非监督分类

基于光谱的影像的分类可分为监督与非监督分类&#xff0c;这类分类方法适合于中低分辨率的数据&#xff0c;根据其原理有基于传统统计分析的、基于神经网络的、基于模式识别的等。 本专题以ENVI5.3及以上版本的监督与非监督分类的实际操作为例&#xff0c;介绍这两种分类方法的…

激光雷达标定入门(10)ROS驱动固态激光雷达(Livox Horizon)

Livox Horizon 资料 据Livox官网介绍&#xff0c;Horizon的探测距离为260米&#xff0c;水平视场角&#xff08;HFOV&#xff09;81.7&#xff0c;可以覆盖10米内的4条车道&#xff0c;搭载5个Horizon的自动驾驶系统可以实现360的全区域探测&#xff0c;而该套装成本仅为64线机…