ThreadLocal+TaskDecorator实现父子线程 参数传递

一、背景

我定义注解,在切面中实现动态数据源切换,但是目标方法中,使用新开线程,异步的方式执行,导致在切面中主线程切换数据源参数,无法在异步的目标方法中使用。

二、实现方式

1、创建UserUtils类。

public class UserUtils {private static  final  ThreadLocal<String> userLocal=new ThreadLocal<>();public static  String getUserId(){return userLocal.get();}public static void setUserId(String userId){userLocal.set(userId);}public static void clear(){userLocal.remove();}
}

2、自定义TaskDecorator类型的类

public class CustomTaskDecorator implements TaskDecorator {@Overridepublic Runnable decorate(Runnable runnable) {// 获取主线程中的请求信息(我们的用户信息也放在里面)String robotId = UserUtils.getUserId();return () -> {try {// 将主线程的请求信息,设置到子线程中UserUtils.setUserId(robotId);// 执行子线程,这一步不要忘了runnable.run();} finally {// 线程结束,清空这些信息,否则可能造成内存泄漏UserUtils.clear();}};}
}

3、创建测试类,此方法依赖线程池,并需要在创建线程池类时,setTaskDecorator把自己的TaskDecorator类设置进去。

public class CreatePassword {public static void main(String[] args) {try{ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setTaskDecorator(new CustomTaskDecorator());executor.initialize();//InheritableThreadLocal存储ThreadLocal<String> username = new ThreadLocal<>();for (int i = 0; i < 2; i++) {UserUtils.setUserId("用户id:"+i);Thread.sleep(3000);CompletableFuture.runAsync(()-> System.out.println(UserUtils.getUserId()),executor);}}catch (Exception e){}}
}

4、测试结果

用户id:0
用户id:1

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

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

相关文章

免费文章生成器的种类,3款免费的文章生成器推荐

内容创作无疑是网络营销和品牌建设中不可或缺的一环。许多人在日常工作中可能会面临时间不足、灵感枯竭等问题&#xff0c;本文将深入聊聊免费文章生成器的种类&#xff0c;详细介绍使用方法。 1. 免费文章生成器的种类 基于模板的生成器 这类生成器通常提供一系列文章模板&…

清新脱俗的Notes主页

大家好&#xff0c;才是真的好。 作为Notes客户端重度用户&#xff0c;我个人非常喜欢Notes客户机&#xff0c;平时都在使用。对于另一些Notes用户&#xff0c;喜欢Notes的人非常喜欢&#xff0c;而且还知道它非常强大&#xff0c;可以进行很多定制化。 今天我们来讲的就是No…

PHP:解决一个字符串中的斜杠 / 进行 JSON 编码时,斜杠被转义为 \/

一、修改前 问题代码 直接通过JSON编码&#xff0c;就会出现问题 代码 $url SO/.$fileName; echo json_encode($url); 效果 二、解决后 代码 使用 json_encode 函数的第二个参数 JSON_UNESCAPED_SLASHES 来禁止对斜杠进行转义 $url SO/.$fileName; echo json_encode…

C#调用cmd.exe(dos命令)两种方法(Process,Cli)

1、通过Process调用cmd命令 1&#xff09;C&#xff03;运行shell命令 string strCmdText; strCmdText "/C copy /b Image1.jpg Archive.rar Image2.jpg"; System.Diagnostics.Process.Start("CMD.exe",strCmdText); 2&#xff09;运行cmd命令隐藏控制…

html实现好看的个人博客留言板源码

文章目录 1.设计来源1.1 博客主界面1.2 常用源码1.3 我的文章1.4 留言板1.5 联系我 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134837482 html实现好看的个人博客留言…

【征稿倒计时十天,ACM独立出版,有确定的ISBN号,ei检索稳且快】

2023 人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff09; 2023 International Conference on Artificial Intelligence, Systems and Network Security 由西南科技大学计算机科学与技术学院主办的2023人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff0…

BearPi Std 板从入门到放弃 - 引气入体篇(9)(DAC->ADC)

简介 结合 BearPi Std 板从入门到放弃 - 引气入体篇&#xff08;7&#xff09;(DAC) 和 BearPi Std 板从入门到放弃 - 引气入体篇&#xff08;8&#xff09;(ADC) 这两篇&#xff0c; 实现 D -> A -> D 的转换, 也就是DAC -> ADC; 开发板 &#xff1a; Bearpi Std(小…

智能DNS与CDN:增强网络性能和用户体验

文章目录 智能DNS与CDN&#xff1a;增强网络性能和用户体验1. 智能DNS1.1 智能DNS简介1.2 智能DNS的工作原理1.3 智能DNS的优点 2. 内容分发网络&#xff08;CDN&#xff09;2.1 CDN简介2.2 CDN的工作原理2.3 CDN的优点 3. 智能DNS与CDN的结合4. 总结 智能DNS与CDN&#xff1a;…

浏览器判断某一个 ip 是否与其在同一个局域网的几种方式

前言 前段时间有个需求&#xff0c; 就是我们有做一个 web 的投屏端&#xff0c; 可以将另一个客户端(比如 android&#xff0c;ios&#xff0c;win&#xff0c;mac) 投屏到 web 站点来。 但是期间因为涉及到引流&#xff0c; 所以针对投屏的客户端是否在同一个局域网下要做不同…

三年没写了, 访问量竟然几十万次。

分享知道是我的爱好。 能帮助任何一个人都是值得的。

谈谈我对HashMap扩容机制的理解及底层实现

目录 一、HashMap的底层实现 二、HashMap扩容机制 概念 详细扩容&#xff1a; 1、初始容量 2、添加元素 3、元素数量检查 4、触发扩容 5、迁移元素 6、更新容量和阈值 代码&#xff1a; 一、HashMap的底层实现 HashMap 是 Java 中常用的数据结构之一&#xff0c;用于…

Python学习路线 - Python语言基础入门 - 判断语句

Python学习路线 - Python语言基础入门 - 判断语句 前言布尔类型和比较运算符布尔类型布尔类型的定义 比较运算符 if语句的基本格式if判断语句 if else 语句if elif else 语句判断语句的嵌套实战案例 前言 进行逻辑判断&#xff0c;是生活中常见的行为。同样&#xff0c;在程序…

Powerbuilder9.0 安装是一直卡在setup is running无法继续

这种情况是安装时&#xff0c;他后面弹出来一个提示框&#xff0c;但是因为其他进程的干扰&#xff0c;我们无法看到也就无法继续了。 我看到这个文章&#xff1a;https://blog.csdn.net/FLORY_/article/details/105244102 使用他说的方法的确有效。过程 1. 打开任务管理器 …

es常用查询编辑

查询指定id信息 GET /index_name/_doc/1074266245查询指定信息并降序 GET /index_name/_search {"query": {"term": {"deviceId": {"value": "1074266245"}}}, "sort": [{"timestamp": {"order&qu…

Mysql的事务日志

Mysql的事务具有四个特性&#xff1a;原子性、一致性、隔离性、持久性。那么事务的四种特性分别是靠什么机制实现的呢&#xff1f; 事务的隔离性由锁机制来保证 事务的原子性、一致性、持久性则由redo log和Undo log来保证。 - redo log是重做日志&#xff0c;提供再写入操作&…

子查询在SQL中的应用和实践

作者&#xff1a;CSDN-川川菜鸟 在SQL中&#xff0c;子查询是一种强大的工具&#xff0c;用于解决复杂的数据查询问题。本文将深入探讨子查询的概念、类型、规则&#xff0c;并通过具体案例展示其在实际应用中的用途。 文章目录 子查询概念子查询的类型子查询的规则实际案例分析…

Photoshop Elements 2023 v21.0(ps简化版)

Photoshop Elements 2023是一款ps简化版图像处理软件&#xff0c;它加入了一些新的功能和工具&#xff0c;以帮助用户更高效地处理图片。 新功能&#xff1a;软件加入了黑科技&#xff0c;采用Adobe Sensei AI技术&#xff0c;主打人工智能&#xff0c;一键P图&#xff0c;新增…

【C语言实现windows环境下Socket编程TCP/IP协议】

C语言实现windows环境下Socket编程TCP/IP协议 主要是记录解决一些在我本地编译运行时出现的问题connect &#xff1a;No error关于头文件关于stray /xxx和socket&#xff1a;No error问题千万记得是服务器先启动哦&#xff0c;客户端后启动下面附上我改好的代码 主要是记录解决…

Demystifying DeFi MEV Activities in Flashbots Bundle

目录 笔记后续的研究方向摘要引言贡献 Demystifying DeFi MEV Activities in Flashbots Bundle CCS 2023 笔记 本文介绍了对 Flashbots 捆绑包中的去中心化金融 &#xff08;DeFi&#xff09; 矿工可提取价值 &#xff08;MEV&#xff09; 活动的研究。作者开发了ActLifter&am…

文献速递:多模态影像组学文献分享(一种诊断方法结合了多模态放射组学和基于腰椎CT及X光的机器学习模型,用于骨质疏松症)

文献速递&#xff1a;多模态影像组学文献分享:(一种诊断方法结合了多模态放射组学和基于腰椎CT及X光的机器学习模型&#xff0c;用于骨质疏松症)** Title 题目 A diagnostic approach integrated multimodal radiomics with machine learning models based on lumbar spine CT…