【退役之重学Java】ThreadLocal

一、ThreadLocal 与 Synchronized 区别

  • ThreadLocal:

    1. 采用“以空间换时间”的方式,为每一个线程都提供了一份变量的副本,从而实现同时访问而互不干扰
    2. 多线程中让每个线程之间的数据相互隔离
  • Synchronized

    1. 同步机制采用“以时间换空间”的方式,值提供一份变量,荣不同的线程排队访问
    2. 对个线程之间访问资源的同步

二、ThreadLocal 方案的好处

  1. 传递数据: 保存每个线程绑定的数据,在需要的地方可以直接过去,避免参数直接传递带来的代码耦合问题
  2. 线程隔离: 各线程之间的数据相互隔离却又具备并发性,避免同步方式带来的性能损失

三、ThreadLocal 内存泄漏

根源是由于,ThreawdLocalMap 的生命周期跟 Thread 一样长,如果没有手动删除对应的 entry 就对导致内存泄漏

四、避免内存泄漏的方法

  1. 使用完 ThreadLocal ,调用其 remove 方法删除对应的 Entry
  2. (or)使用完 ThreadLocal,当前 Thread 也随之运行结束

五、为什么 Entry 的key 使用弱引用指向 ThreadLocal

  事实上,在 ThreadLocalMap 中的 set/getEntry 方法中,会对 key 为 null (即 ThreadLocal 为 null)进行判断,如果为 null,则将 value 置为 null
  这意味着使用完 ThreadLocal,CurrentThread 依然运行的前提下,就算忘记调用 remove 方法,弱引用比强引用可以多一层保障:
  弱引用的 ThreadLocal 会被回收,对应的 value 在下一次 ThreadLocalMap 调用 set,get,remove 中的任一方法时会被清除,从而避免内存泄漏

六、Hash 冲突的解决

  ThreadLocalMap 使用 线性探测法 来解决 hash 冲突
  该方法一次探测下一个地址,直到有空的地址后插入,若整个空间都找不到空余的地址,则产生溢出。

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

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

相关文章

经典文献阅读之--D-Map(无需射线投射的高分辨率激光雷达传感器的占据栅格地图)

0. 简介 占用地图是机器人系统中推理环境未知和已知区域的基本组成部分。《Occupancy Grid Mapping without Ray-Casting for High-resolution LiDAR Sensors》介绍了一种高分辨率LiDAR传感器的高效占用地图框架,称为D-Map。该框架引入了三个主要创新来解决占用地图…

jQuery中的ready()函数:优雅地处理页面加载事件

在前端开发中,精确控制JavaScript脚本的执行时机对于保证页面元素被正确操作至关重要。传统上,开发者依赖于原生JavaScript的window.onload事件来确保页面所有资源(包括图片、脚本等)加载完毕后再执行特定代码。然而,这…

信息化系统建设运维服务方案(投标)Word原件

《信息化系统运维服务方案》(原件可获取) 1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 软件全套精华资料包清单部分文件列表: 工作安排任…

ICode国际青少年编程竞赛- Python-2级训练场-坐标入门

ICode国际青少年编程竞赛- Python-2级训练场-坐标入门 1、 d Item.x - Dev.x Dev.step(d)2、 d Item.y - Dev.y Dev.step(d)3、 d Dev.y - Item.y Dev.step(d)4、 d Item[0].x - Dev.x Dev.step(d) Dev.step(-d) Dev.turnRight() d Item[1].y - Dev.y Dev.step(d)…

Jetson Orin NX L4T35.4.1平台自启动时间优化调试记录2

基于上一篇继续记录 Jetson Orin NX L4T35.4.1平台自启动时间优化调试记录1-CSDN博客 1. 测试UEFI 延时5s问题 [2024-03-19 11:51:04] L4TLauncher: Attempting Direct Boot [2024-03-19 11:51:09] EFI stub: Booting Linux Kernel... debug UEFI 在 11:51:04和11:51:09之…

电商数据接口|如何获取电商数据?

随着互联网的发展,电商的运营方式也逐渐数据化,在大数据的影响下,电商领域很大程度上改变了传统的运营模式。很多商家如今都非常重视数据,并将数据贯穿于整个店铺的运营之中。 那么,具体来说电商大数据有哪些妙用呢&a…

商务分析方法与工具(十):Python的趣味快捷-公司财务数据最炫酷可视化

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

Spring boot使用websocket实现在线聊天

maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spr…

软件2班20240513

第三次作业 package com.yanyu;import java.sql.*; import java.util.ResourceBundle;public class JDBCTest01 {public static void main(String[] args) {ResourceBundle bundle ResourceBundle.getBundle("com/resources/db");// ctrl alt vString driver …

高端智能终端RK3399主板在配送机器人项目的应用,支持免费定制

基于高端智能终端主板IoT-3399E推出了系列配送机器人&#xff0c;面向各类线下门店的配送服务。配送机器人可实现智能识别、精准配送、自动避障、自主调度系统、语音播报、信息互动等功能&#xff0c;大幅提升服务效率&#xff0c;为消费者带来更加便捷、智能的服务体验。 核心…

MySQL删除篇

文章目录 deletetruncatedrop delete delete from product ; 使用场景&#xff1a;一般正常删除数据&#xff0c;可回滚&#xff0c;不删除表结构 truncate truncate table product;使用场景:快速清空表数据&#xff0c;不可回滚&#xff0c;不删除表结构 drop drop tabl…

RK3568/RK3588智慧校园AI盒子方案,电子班牌,出入口管制,数字化校园等,支持鸿蒙,支持免费定制

智慧校园解决方案基于物联网、人工智能等新兴技术&#xff0c;为师生构建智能化校园环境&#xff0c;涵盖了校园安全、智慧教室、考勤管理、智慧食堂等多个场景&#xff0c;从工作、学习到生活&#xff0c;带来更人性化、更便捷、更高效的服务。 方案架构 方案特点 全面感知校园…

驾驭多云环境,加速AI创新丨Animbus Cloud 8.3.0 算力调度平台升级发布

大模型开启全球新一轮AI浪潮&#xff0c;伴随算力规模的爆发增长以及计算技术的多元创新&#xff0c;需要更稳定、高效、敏捷的异构计算基础设施&#xff0c;才能充分发挥对算力能力的重要支撑。 作为开放智能云边架构引领者&#xff0c;九州未来凭借多年的技术积累、实践沉淀…

2024-05-09 问AI: 在深度学习中,什么是模型检查点?

文心一言 在深度学习中&#xff0c;“模型检查点”&#xff08;Model Checkpoint&#xff09;是指训练过程中的一个保存点&#xff0c;它包含了模型在那一特定时刻的权重、配置和优化器的状态等信息。这种技术允许在训练被中断时&#xff0c;或者想要从某个点开始继续训练时&a…

JNI传递ByteArray参数错误

JNI传递ByteArray参数使用如下方式出现异常&#xff1a; jsize length env->GetArrayLength(data);jbyte* initBytes env->GetByteArrayElements(data, nullptr);char* initBuffer new char[length];memcpy(initBuffer, initBytes, length);env->ReleaseByteArrayE…

深入理解Python对象的字符串表示:`__str__`与`__repr__`的区别与应用

在Python编程中&#xff0c;我们经常需要将对象转换为字符串形式&#xff0c;无论是为了打印输出还是进行字符串操作。Python提供了两种特殊的方法来定义对象的字符串表示形式&#xff1a;__str__和__repr__。本文将详细讲解这两种方法的区别、用途以及如何在实际编程中使用它们…

BA112协议网关促进楼宇自控系统与OPC UA平台集成

在当今智能化建筑的潮流下&#xff0c;楼宇自控系统的发展已成为建筑行业的重要趋势。然而&#xff0c;由于不同厂商生产的楼宇自控设备使用的通信协议多样&#xff0c;导致了设备之间的互联互通存在困难。为了解决这一问题&#xff0c;钡铼技术最新推出了BACnet转OPC UA网关BA…

企业网站慎用免费SSL证书!OV证书才是首选

市面上有很多免费证书提供&#xff0c;免费的SSL证书更适用于个人博客、学生学习、测试等应用场景。如果您的网站是企业网站一定慎用免费的SSL证书&#xff0c;而是选择企业级的OV证书。 一&#xff0e;免费SSL证书的风险 1安全性&#xff1a;免费SSL证书通常只提供基本的加密…

景区AR导览导航语音播报小程序系统开发源码搭建

开发景区AR导览导航语音播报小程序系统需要以下步骤&#xff1a; 1. 确定需求&#xff1a;明确系统需要实现的功能&#xff0c;如AR导览、导航、语音播报等。 2. 设计系统架构&#xff1a;根据需求设计系统的架构&#xff0c;包括前端和后端。前端需要实现AR导览、导航、语音…

中学数学研究杂志中学数学研究杂志社中学数学研究编辑部2024年第4期目录

教学纵横 高中数学选择性必修课程函数主线分析 柳双;吴立宝; 1-4 贯彻新课程理念 促学习能力提升——以“三角函数诱导公式”教学为例 陆雨轩; 4-6《中学数学研究》投稿&#xff1a;cn7kantougao163.com 对高中数学新课标教材新增知识点的价值分析 钱伟风;刘瑞美; …