ThreadLocal-阿里规范对ThreadLocal要求

ThreadLocal及阿里(TransmittableThreadLocal,TTL)分析 ThreadLocal及TTL分析 阅读详情

package com.nanjing.gulimall.zhouyimo.test;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author zhou
 * @version 1.0
 * @date 2024/3/17 11:05 下午
 */
class MyData{
    ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(() -> 0);

    public void add(){
        threadLocal.set(threadLocal.get()+1);
    }
}
public class ThreadLocalDemo2 {
    public static void main(String[] args) {
        MyData myData = new MyData();
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        try {
            for (int i = 0; i < 10; i++) {
                threadPool.submit(() -> {
                    try {
                        Integer beforeInt = myData.threadLocal.get();
                        myData.add();
                        Integer afterInt = myData.threadLocal.get();
                        System.out.println("当前线程:"+Thread.currentThread().getName()+",beforeInt:"+beforeInt+",afterInt:"+afterInt);
                    } finally {
                        myData.threadLocal.remove();
                    }
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            threadPool.shutdown();
        }
    }
}


当前线程:pool-1-thread-2,beforeInt:0,afterInt:1
当前线程:pool-1-thread-1,beforeInt:0,afterInt:1
当前线程:pool-1-thread-2,beforeInt:0,afterInt:1
当前线程:pool-1-thread-1,beforeInt:0,afterInt:1
当前线程:pool-1-thread-3,beforeInt:0,afterInt:1
当前线程:pool-1-thread-3,beforeInt:0,afterInt:1
当前线程:pool-1-thread-1,beforeInt:0,afterInt:1
当前线程:pool-1-thread-1,beforeInt:0,afterInt:1
当前线程:pool-1-thread-2,beforeInt:0,afterInt:1
当前线程:pool-1-thread-3,beforeInt:0,afterInt:1
加强版ThreadLocal之阿里开源TransmittableThreadLocal学习 我们都知道ThreadLocal是可以在一个线程中当容器使用的局部变量,是线程隔离、线程安全的。 但是如果子线程要获取父线程的变量,便不太方便。 下面我们一步一步进入: 一、ThreadLocal 示例: public class MyThread01 { public static void main(String[] args) throws InterruptedException { ThreadLocal<String> parent = new 阅读详情

相关推荐

阿里开源的TransmittableThreadLocal的正确使用姿势

TransmittableThreadLocal是阿里巴巴开源的一个线程本地变量,它是ThreadLocal的一个增强版,可以在线程池等多线程环境下使用,解决了ThreadLocal在多线程环境下的一些问题。在多线程环境下,ThreadLocal可以避免线程安全问题,但是在使用线程池等多线程环境时,ThreadLocal可能会出现一些问题。例如,当使用线程池时,线程池中的线程可能会被多个任务共享,如果使用ThreadLocal存储数据,可能会导致数据被错误地共享。

m0_51681531的博客 1万+

阿里开源TransmittableThreadLocal使用经验记录

本文章主要记录我在一次业务优化中,使用线程池带来的子父线程值传递问题,及使用TransmittableThreadLocal来解决该问题的经验,并对TransmittableThreadLocal原理做些梳理。

天天都在进步的博客 3083

阿里巴巴TransmittableThreadLocal使用指南

TransmittableThreadLocal在线程池上的妙用

tianmlin1的博客 1620

Java并发编程--9-ThreadLocal原理与内存泄漏:阿里规范为何强制要求remove()?

ThreadLocal原理与内存泄漏分析摘要: ThreadLocal通过线程独立的ThreadLocalMap实现数据隔离,每个线程维护自己的变量副本。其核心问题在于内存泄漏风险:Entry使用弱引用Key(指向ThreadLocal)和强引用Value。当ThreadLocal对象被回收后,Key变为null,但Value仍被线程强引用。在线程池等复用场景下,未remove()的Value会持续占用内存,导致OOM或数据串号。 关键点: ThreadLocalMap的Entry继承WeakReferen

weisian的博客 7801

阿里巴巴编程规范实战(一):编程规约之并发处理

编程规约之并发处理

zqy_zq_zxl的博客 918

PC微信(3.9.2.23)逆向实战:定位并Hook消息接收函数

本文详细介绍了PC微信(3.9.2.23)逆向分析中定位并Hook消息接收函数的完整实战流程。通过Cheat Engine动态定位未读消息数内存地址,结合OllyDbg分析代码上下文,最终找到稳定的Hook点,并分享了实战中的关键注意事项与踩坑经验。

lll78的博客 472

ThreadLocal能解决线程安全问题?胡扯!本文教你正确的使用姿势

转自 腾讯云:https://cloud.tencent.com/developer/article/1600714 ThreadLocal使用的正确姿势 说了这么多,那使用它的正确姿势是什么呢?正确姿势用文字无法表达,请以如下使用示例为参照。 众所周知,SimpleDateFomat是线程不安全的,所以若我们这样定义一个全局模版: public static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); 在

aITstar的博客 314

【vue看板】

大屏看板提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:代码量较多,看板中的。

weixin_46223284的博客 2771

线程池创建规范的相关问题

线程池、阿里开发规范、ThreadLocal、ThreadPoolExecutor

Ellis_li 的博客 484

5个企业级SOC平台横向对比:IBM QRadar vs Splunk vs 奇安信NGSOC

本文深度对比了IBM QRadar、Splunk和奇安信NGSOC等五大企业级SOC平台的核心能力,从架构设计、威胁检测、运营效率、成本模型和行业适配度五个维度进行解析。文章特别强调安全运营中心(SOC)在现代企业中的关键作用,并提供了实战数据和优化建议,帮助企业选择最适合自身需求的SOC解决方案。

a1b2c的博客 662

10行代码搞定QMT实盘交易:手把手教你用Python自动化买卖股票(附完整源代码)

本文提供了一份详尽的QMT实盘交易教程,手把手教你使用Python构建自动化交易系统。内容涵盖环境配置、账户连接、查询与下单等核心代码,并附有完整的源代码示例,帮助开发者快速掌握从零到实盘的完整流程,实现安全可靠的股票自动化买卖。

weixin_29214335的博客 438

快手一面:为什么要求用Static来修饰ThreadLocal变量?

【代码】快手一面:为什么要求用Static来修饰ThreadLocal变量?

fuladulu的博客 256

使用LogisticRegression和LightGBM模型对信贷违约进行预测----基于kaggle比赛数据

3.分离数值型变量与类别型变量,发现有些数值型变量因为输入不规范,比如数值中含有字符(28_,_10000_等)被划分为类别型变量 ,比如 'Age','Annual_Income','Num_of_Loan', 'Num_of_Delayed_Payment', 'Changed_Credit_Limit','Credit_Mix','Monthly_Balance', 'Outstanding_Debt' ,'Amount_invested_monthly'等。三、分箱,woe编码,计算IV值。

I_am_a_big_tiger的博客 1682

JUC并发编程第十篇,谈谈ThreadLocal原理与内存泄露的那些事儿

1、ThreadLocal 不是解决线程间共享数据问题的,而是用于 变量在线程间隔离且在方法间共享的场景。2、它隐式的在不同线程内创建独立实例副本,避免了实例线程的安全问题。3、每个线程持有一个只属于自己的Map,维护了ThreadLocal对象与具体实例的映射,该Map只能被持有它的线程访问,故不存在线程安全以及锁的问题。4、ThreadLocalMap 的 Entry 对 ThreadLocal 的引用为弱引用,避免了 ThreadLocal 对象无法被回收的问题。

I wanna be myself, where I Belong. 448

(论文加源码)基于CNN和LSTM的脑电情绪识别(数据集为DEAP和seed)

论文及源码见个人主页:https://download.youkuaiyun.com/download/qq_45874683/84118637?spm=1001.2014.3001.5503 (论文加源码)基于CNN和LSTM的脑电情绪识别(数据集为DEAP和seed)4D-CRNN 目录 目录: 运行过程: 1. 运行1D文件(没有什么bug): 2. 再运行3D文件(没有出现bug): 3. 最后运行main文件(出现了两个bug)(前提需要配置好tensorflow的框架): 第一个bug是..

qq_45874683的博客 6363

YOLOv10精度上不去?QAT量化感知训练全流程,INT8推理mAP只掉0.8%

普通PTQ量化虽简单,但无法应对YOLOv10的小目标特征和激活分布波动,导致精度暴跌。QAT通过“模拟量化误差+联合优化权重与量化参数”,让INT8模型精度接近FP16,同时速度提升1.8倍,完美适配实时检测场景(如安防监控、自动驾驶)。该流程已在工业级项目中验证,针对YOLOv10的优化策略(敏感层保护、小目标加权、分阶段训练)可直接迁移至其他YOLO系列(v8/v9),量化后精度损失均可控制在1%以内。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 915

JUC05-ThreadLocal、ThreadLocal底层与Thead、ThreadLocalMap之间的关系、Java对象内存布局

JUC05-ThreadLocal、ThreadLocal底层与Thead、ThreadLocalMap之间的关系、Java对象内存布局

m0_62176282的博客 301

《QEMU/KVM源码分析与应用》读书笔记4 —— 第2章 QEMU基本组件(1)

《QEMU/KVM源码分析与应用》读书笔记4 —— 第2章 QEMU基本组件(1)

phmatthaus的专栏 1474

ThreadLocal概述、解决SimpleDateFormat出现的异常、内存泄漏、弱引用、remove方法

ThreadLocal概述、解决SimpleDateFormat出现的异常、内存泄漏、弱引用、remove方法

m0_74969835的博客 1174

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

(十)JUC - ThreadLocal

不再会被使用的对象或者变量占用的内存不能被回收,就是内存泄漏。

LaurenHUA的实验室 156

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JUC并发编程(4)—ThreadLocal介绍(超详细 集大成版本!!!)

JUC之ThreadLocal超详细集大成版本 看完直接懂

qq_59622162的博客 401

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

DateTimeFormatter 与SimpleDateFormat 的区别

SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类。这是阿里java开发规范提到 的强制要求。为何如此呢? SimpleDateFormat 是非线程安全类,在使用过程中可能会造成安全问题。多线程调用parse方法剖出的异常: DateTimeFormatter 显示说...

攻防人生3722的博客 5675

阿里Java面试核心讲:体系化技术通关秘籍

Java面试准备需要系统化的知识体系支撑,从JVM内存模型到并发编程原理,再到Spring框架的底层机制,每个技术点都涉及深层次的实现逻辑。以枚举类型为例,其本质是继承Enum的final类,这种设计模式在单例实现和序列化处理中展现出独特优势。性能调优作为工程实践重点,涉及CPU飙高排查、内存泄漏分析等典型场景,工具链上需要掌握jstack、MAT等专业工具。分布式环境下,阿里禁止JOIN操作等规范背后是数据库分库分表的架构考量,而柔性事务方案则解决了数据一致性问题。本资料整合了阿里技术团队多年实战经验,特

weixin_33585822的博客 281

spring boot链路追踪和限流

已经存在的解决方案 springcloud已经提供sleuth,搭建Zipkin logback提供了MDC,可以再日志里面打印 其实不管啥方法,都是aop或者Filter 拦截里面加个标识 在spring boot各个组件之间调用的时候,要表标识带过去,也都是用的ThreadLocal 为啥不自己实现一把 我希望啥呢,打印日志更规范,更加自动化,轻量级一点 啥规范呢,{开始时间,结束时间,...

dzl84394的专栏 786

ThreadLocal实战:电商大促性能提升20%秘籍

前言作为互联网软件开发同行,你是不是也遇到过这样的场景:在多线程接口开发中,为了传递用户上下文、管理数据库连接,要么把参数在 Service、DAO 层层层传递,代码写得又冗余又容易出错;要么不小心让多线程共享了非线程安全的变量,线上时不时蹦出 “数据串用” 的 BUG?其实这些问题,用 ThreadLocal 就能高效解决 —— 今天咱们就从一个大厂真实案例切入,把 ThreadLocal 的实战用法、问题排查和专家建议一次性讲透,看完你就能直接用到项目里。先给你讲个我前阵子和阿里 P8 架构师聊到的真实

2501_93873871的博客 642

Java编程规范避坑指南:阿里开发手册15条强制规约实战解析

Java编程规范避坑指南:读阿里《Java开发手册》,把 15 条最容易造成线上故障的强制规约整理成清单,覆盖命名、日期、集合、并发,照着改能少踩一个坑。

大家好,我是一名大三学生,主攻 Java 后端开发。熟悉 Spring 全家桶、MySQL、Redis 以及微服务常用中间件。热爱数据结构与算法,经常在 GitHub 上分享开源项目,也在 优快云 记录自己的学习过程。欢迎关注我,一起交流 330
上一篇: ThreadLocal-案例编码实战
下一篇: GuLi商城-商品服务-API-三级分类-网关统一配置跨域
ZHOU_VIP
博客等级 码龄11年 1万+粉丝 1779原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值