ThreadLocal学习笔记

news2024/10/7 4:22:54

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(),避免出现内存泄漏问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

把数组中的key都取出来然后去重

今日接到一个小需求,一张表有类似这样的数据:(下面是一行) 但是每行的数据,主要是key不一样,我们想把所有的key取出来,并且做个去重。 首先我先在mysql中, SELECT GROUP_CONCAT(RE…

在租户内启用SharePoint Embedded

要开启 SharePoint Embedded,你得是管理员,然后按照这些步骤操作: 登录到你的 SharePoint 管理中心。在左边的菜单里找到“设置”选项,点进去。 3. 在设置页面里找到“SharePoint Embedded 应用”。 4.如果这个功能还没开启&…

高阶测试开发必备技能: k8s入门!

现在稍微有点规模公司都是基于docker容器化部署技巧,K8s现在主流,应用最广的容器集群管理技术。 k8s全称kubernetes(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s),基于Docker容器…

Top-level await is not available in the configured target environment

当在使用 Vite 进行项目构建时,可能会遇到如下错误提示:ERROR: Top-level await is not available in the configured target environment。 问题原因 这个错误通常是由于项目配置中的目标浏览器环境不支持 JavaScript 的 top-level-await 特性。top-le…

探索Viper-适用于GoLang的完整配置解决方案

前言 对于现代应用程序,尤其大中型的项目来说,在程序启动和运行时,往往需要传入许多参数来控制程序的行为,我们可以通过命令行参数,环境变量,配置文件等方式来将参数传递给程序。而Viper库为Golang语言开发…

Mac安装配置maven

Mac安装配置maven 官网下载地址:https://maven.apache.org/download.cgi 下载好以后解压配置 maven 环境变量 打开终端,输入命令打开配置文件./bash_profile open ~/.bash_profile输入i进入编辑模式,进行maven配置; MAVEN_HOME为maven的本地路径 ex…

VR全景技术对党建宣传有什么好处,如何应用在党建宣传

引言: 近年来,随着VR(虚拟现实)全景技术的不断发展,其在各个领域的应用也愈加广泛。在党建宣传方面,VR全景技术正逐渐成为一种创新而强大的工具,为组织的思想宣传提供了全新的方式。 一&#x…

SpringBoot 实现自定义指标监控

一、添加业务监控指标 在 spring-web-prometheus-demo 项目的基础上,我们添加一个 PrometheusCustomMonitor 类。在这里面我们定义了三个业务指标: order_request_count:下单总次数order_amount_sum:下单总金额 Component publ…

全球医疗器械产品查询-30个官网查询系统合集!

国内外上市医疗器械产品数据及注册备案信息是医疗器械行业中极其重要的情报之一。大多数医械人都知道国内医疗器械产品信息可在NPMA及各省市药监局官网查询,但对于国际的医疗器械产品数据披露平台,由于语言壁垒及网页设计习惯差异,查询却不太…

深入了解Redis:选择适用于你的场景的持久化方案

自然语言处理的发展 文章目录 自然语言处理的发展强烈推荐前言:Redis提供了几种主要的持久化方案:RDB快照持久化:工作原理: AOF日志文件持久化:混合持久化: 总结强烈推荐专栏集锦写在最后 强烈推荐 前些天…

厨房用品国际市场拓展:如何利用海外网红营销助力品牌成长

随着全球化的加速和互联网的普及,越来越多的中国厨房用品品牌开始寻求海外市场的拓展。而在这一过程中,海外网红营销正崭露头角,为品牌的跨足国际市场提供了强有力的助力。本文Nox聚星将和大家探讨如何通过海外网红营销助力厨房用品品牌在海外…

第四篇【传奇开心果系列】beeware的Toga开发移动应用示例:健身追踪应用

传奇开心果博文系列 系列博文目录beeware的Toga开发移动应用示例系列博文目录前言一、记录存储运动活动数据二、添加添加统计显示功能三、添加图表显示数据分析功能四、增加健身计划管理五、增加备份数据恢复数据功能六、初步整合代码示例七、增加登录验证功能八、完成最终整合…

什么是数据库设计?基本步骤有哪些?

数据库设计结构图 实线代表输入,虚线代表输出,每个节点的输出作为下一个节点的输入。 基本步骤 1.需求分析阶段 数据需求分析是在项目确定之后,用户和设计人员对数据库应用系统所要涉及的内容(数据)和功能&#xff0…

vmware虚拟机centos8共享文件夹挂载

1.设置虚拟机共享文件夹 2. 上述设置完毕之后,重启进入虚拟机,查看出现的共享文件夹名称 vmware-hgfsclient 3.查看是否有挂载目录,挂在目录默认为 /mnt/hgfs。没有时可以使用以下命令创建 mkdir /mnt/hgfs 4. 手动挂载目录--只能实现一次 注…

【python】argparse解析参数的过程

python基础知识 python文件解析if \_\_name\_\_ \_\_main\_\_的作用import到底导入了什么?argparse解析命令行参数的过程Debug—案例分析 python文件解析 Python和C语言的编译、执行过程有很大区别。我们先回顾一下c语言的执行过程,首先代码文件要编译…

GitLab 中国发行版如何设置镜像拉取策略?

最近在用极狐GitLab(极狐GitLab 可以理解为 GitLab 在中国的发行版) CI/CD 的时候遇到一个问题:CI/CD 中有一个 stage 需要拉取 dockerhub 上的镜像,但是由于 dockerhub 在国内的访问不是很顺畅,经常发生 timeout 的情…

pytest框架的基本使用

1. 测试框架的作用 测试框架不关系用例的内容 它关心的是:用例编排和结果收集 2. pytest框架的特点 1. 适用于python语言 2. 用法符合python风格 3. 有丰富的生态 3. 安装pytest框架 1. 新建一个项目 2. 在项目终端窗口输入如下命令,用于安装py…

危险!这3本期刊陆续被三大数据库剔除!2024年EI期刊目录首次更新!

【SciencePub学术】2024年1月1日,爱思唯尔更新了EI Compendex收录期刊目录。 继上次EI期刊目录更新之后,本次1月更新共有3本期刊发生变动: 其中,有3本期刊停止收录(DISCONTINUED),连续出版/核心…

如何使用Docker部署WBO白板并实现公网地址远程访问

本文主要是如何使用Docker部署WBO白板并实现公网地址远程访问的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日一句&am…

MySql语句中的ON DUPLICATE KEY UPDATE使用详解

目录 一:主键索引,唯一索引和普通索引的关系1. 主键索引2. 唯一索引:3. 普通索引:1:ON DUPLICATE KEY UPDATE功能介绍:2:ON DUPLICATE KEY UPDATE测试样例总结: 执行以下实验进行分析…