ThreadLocal基本原理

ThreadLocal基本原理

一、定义

ThreadLocal是java中所提供的线程本地存储机制,可以利用改机制将数据缓存在线程内部,该线程可以在任意时刻、任意方法中获取数据

二、底层原理

在这里插入图片描述

ThreadLocal底层是通过ThreadLocalMap来实现的,每个Thread对象中都存在一个ThreadLocalMap,此Map的key为ThreadLocal对象,Map的value为需要缓存的值

三、ThreadLocal易造成的内存泄漏

内存泄漏原因

如果在线程池中使用ThreadLocal会造成内存泄漏,因为当ThreadLocal对象使用完成以后,应该要把设置的key,value也就是Entry对象进行回收,但线程池中的线程不会被回收,而线程对象是通过强引用指向ThreadLocalMap,而ThreadLocalMap也是强引用指向Entry对象,线程不会被回收那么Entry也就不会被回收。从而出现内存泄漏。

解决办法
在使用了ThreadLocal对象之后,手动调用ThreadLocal的remove方法,手动清除Entry对象。

在这里插入图片描述

四、使用场景

1.spring中的事务管理器就是使用了ThreadLocal
2.在拦截器中存储登录用户的信息,那么在该线程的任意方法中就可以取出
3.参数传递,a调b,b调c,为了传递某参数,可以放在ThreadLocal中
4.pageHelper的pageHelper.startPage(m,n);他是存在ThreadLocal中的,在mybatis拦截器里面再拿出来拼接SQL

五、InheritableThreadLocal与TransmittableThreadLocal

InheritableThreadLocal主要用于子线程创建时,需要自动继承父线程的ThreadLocal变量,方便必要信息的进一步传递
TransmittableThreadLocal 在使用线程池等会缓存线程的组件情况下传递ThreadLocal

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

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

相关文章

搭建Docker私有仓库registry

下载registry registry是Docker官方提供的仓库镜像 拉取镜像,不指定版本默认拉取最新版本镜像。 docker pull registry Using default tag: latest latest: Pulling from library/registry 79e9f2f55bf5: Pull complete 0d96da54f60b: Pull complete 5b27040df4…

linux环境基础开发工具2(gcc/g++ 、 make/ Makefile)

目录 Linux编译器-gcc/g使用 Linux项目自动化构建工具-make/Makefile Linux编译器-gcc/g使用 1. 背景知识 1.2 gcc/g -v 查看当前服务器的编译器版本 1.3 安装gcc / g sudo yum install -y gcc-c 1.4 预处理 -> 编译 -> 汇编 -> 链接 [wxqVM-4-9-centos Test]$ to…

cesium wall 扩散墙(动态立体墙效果 Primitive 方法)

cesium wall 扩散墙(动态立体墙效果)以下为源码直接复制可用 1、实现思路 1、此效果运用cesium 中 Primitive 方法,通过传入中心点、半径、顶点数、颜色来进行加载。 2、运用 Math 方法 对传进来的中心点、半径、定点数,来计算个顶点经纬度。 3、通过Primitive 方法中upda…

漏洞复现-锐捷Ruijie系列

漏洞复现-锐捷Ruijie 绕过身份验证锐捷EG易网关 Admin/admin锐捷EG2000GE存在命令执行漏洞锐捷网络股份有限公司校园网自助服务系统存在目录穿越漏洞ruijie-eg-guestisup-ip-rce.yml🗡锐捷RG-UAC应用网关前台RCE数据库审计系统存在后台 downloadTcpDumpFiles⽂件读取锐捷交换…

整数序列删除指定数字,其他数顺序不变

#include <stdio.h>//整数序列删除一个数&#xff0c;其他数顺序不变 int main() {int arr[50] {0};//int arr[50] {1,2,3,4,5};int n 0;int del 0;int i 0;int j 0;scanf("%d",&n);for(i 0;i < n;i)scanf("%d",&arr[i]);scanf(&q…

Win11系统启动VMware上虚拟机蓝屏解决办法

背景 最近有在做一个项目的过程中需要使用虚拟机&#xff0c;用原来装好的的Vmware14打开虚拟机&#xff0c;直接蓝屏了&#xff0c;尝试了如下几种方法来解决&#xff0c;最好用的就是第二种&#xff0c;直接下载最新版本(在软件管家中直接下载)。 虚拟机 目前常用的虚拟机软…

【MySQL】深入解析索引实现原理

文章目录 1、索引介绍2、索引分类2.1、数据结构HashB Tree 2.2、存储方式聚簇索引非聚簇索引 2.3、功能特性主键索引唯一索引普通索引 2.4、字段数量单列索引多列索引 3、最佳实践3.1、索引覆盖3.2、回表操作3.3、最左匹配原则3.4、索引下推 1、索引介绍 对于MySQL数据库来说…

ADCSsync:基于ESC1执行DCSync技术和哈希转储的强大工具

关于ADCSsync ADCSsync是一款功能强大的临时性DCSync技术测试工具&#xff0c;该工具基于ESC1实现其功能&#xff0c;虽然该工具在运行速度方面没有优势&#xff0c;但ADCSsync能够在不使用DRSUAPI或卷影副本的情况下有效地执行临时DCSync攻击技术测试。 ADCSsync使用了ESC1从…

影响MySql 服务性能最重要的两个参数。

不同的需求&#xff0c;不同服务器硬件配置&#xff0c;要想MySql 服务处于最优状态是需要调试一些参数的&#xff0c;可调的参数非常多&#xff0c;在看完官方的mysql的文档&#xff0c;结合以前的配置情况在这里选择影响性能最大的参数作介绍&#xff1a; 先查一下参数情况&…

1 redis7概述

Redis7 1 Redis简介 Redis之所以称之为字典服务&#xff0c; 是因为 Redis 是一个 key-value存储系统。 支持存储的 value类型很多&#xff0c; 包括 String(字符串)、List(链表)、Set(集合)、Zset(sorted set --有序集合)和 Hash&#xff08;哈希类型&#xff09;等。 Redis…

为什么说 Scroll 上的 PenPad,有望在本轮牛市行情中胜出?

随着ETF效应下&#xff0c;推动比特币不断突破前高&#xff0c;这也进一步推动市场走向牛市。事实上&#xff0c;在每一轮牛市行情中&#xff0c;都会涌现出大量的新项目&#xff0c;并伴随大量的资产面向市场&#xff0c;而如何帮助这些资产、项目实现更好的启动变得尤为关键。…

【话题】2024年AI辅助研发趋势,有那些应用领域

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读文章&#xff01; 此篇是【话题达人】系列文章&#xff0c;这一次的话题是《2024年AI辅助研发趋势》 目录 背景概念实践医药领域汽车设计领域展望未来文章推荐 背景 随着人工智能技术的持续发展与突破&#xff0c;2024年AI辅…