线程局部变量(ThreadLocal)

news2025/1/10 3:27:28

线程局部变量(ThreadLocal)

    • 1、什么是ThreadLocal?
    • 2、基本用法
    • 3、注意事项


💖The Begin💖点点关注,收藏不迷路💖

1、什么是ThreadLocal?

ThreadLocal 是 Java 中用于实现线程局部变量的机制,它允许每个线程拥有自己独立的变量副本,从而避免了线程间的数据共享冲突。

2、基本用法

  • 创建实例:使用 ThreadLocal<Type> 创建一个实例。
  • 设置值:通过 set(value) 方法为每个线程设置独立的值。
  • 获取值:通过 get() 方法获取当前线程的值。
  • 移除值(可选):使用 remove() 方法清理,以避免内存泄露。

示例代码:

public class ThreadLocalExample {  
    // 创建一个ThreadLocal实例  
    private static final ThreadLocal<Integer> threadLocal = new ThreadLocal<>();  
  
    public static void main(String[] args) {  
        // 线程1  
        Thread thread1 = new Thread(() -> {  
            threadLocal.set(1);  
            System.out.println("Thread 1: " + threadLocal.get());  
            // 清理ThreadLocal变量,避免内存泄露  
            threadLocal.remove();  
        });  
  
        // 线程2  
        Thread thread2 = new Thread(() -> {  
            threadLocal.set(2);  
            System.out.println("Thread 2: " + threadLocal.get());  
            // 清理ThreadLocal变量,避免内存泄露  
            threadLocal.remove();  
        });  
  
        thread1.start();  
        thread2.start();  
    }  
}

3、注意事项

  1. 内存泄露:在 Web 服务器等管理环境中,线程可能长时间存活。若 ThreadLocal 变量未及时清理,会导致内存泄露。
  2. 清理:在适当的时候(如线程结束或任务完成后),调用 remove() 方法清理。
  3. 避免静态 ThreadLocal:静态 ThreadLocal 会在类的所有实例间共享,可能引发意外行为。
  4. 线程安全:虽然 ThreadLocal 提供了变量隔离,但在操作共享资源时仍需保证线程安全。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

IEC 61850标准协议解读 1.建模讲解

IEC61850协议标准和之前的101、104协议最大的区分就是在模型这里&#xff0c;模型可以说是一个变电站里面的智能设备的定义&#xff0c;里面定义了网络连接信息、数据上报方式、设备访问控制点等&#xff0c;所以说在不同系统的对接过程中&#xff0c;有了这么一个基于标准定义…

sqliabs靶场练习

关卡 熟悉Mqsql相关命令Less-1Less-2Less-3Less-4Less-5Less-6Less-7Less-8Less-9Less-10 熟悉Mqsql相关命令 首先先熟悉一下Mysql的相关命令&#xff0c;可能在SQL注入的时候会用到。 1.查询服务器主机信息 HOSTNAME 主机名称 datadir——数据库路径 version_compile_os—…

JavaDS —— 红黑树

前言 还是一样&#xff0c;这里的红黑树重点讲述插入代码的实现&#xff0c;如果对红黑树的删除感兴趣&#xff0c;可以去翻阅其他资料。 在数据结构专栏中已经对 AVL 树的旋转调整做了分析和讲解&#xff0c;这里红黑树也会使用到旋转调整的代码&#xff0c;就不讲述旋转代码…

成都云飞浩容文化传媒有限公司怎么样可靠吗?

在数字经济浪潮汹涌的今天&#xff0c;电商行业作为推动经济高质量发展的关键引擎&#xff0c;正以前所未有的速度重塑着商业版图。在这场变革中&#xff0c;成都云飞浩容文化传媒有限公司凭借其专业的电商服务能力和前瞻性的市场洞察&#xff0c;成为了众多品牌商家信赖的合作…

助力草莓智能自动化采摘,基于嵌入式端超轻量级模型LeYOLO全系列【n/s/m/l】参数模型开发构建果园种植采摘场景下草莓成熟度智能检测识别系统

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经渗透到我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;再到医疗健康&#xff0c;其影响力无处不在。然而&#xff0c;当我们把目光转向中国的农业领域时&#xff0c;一个令人惊讶的…

Git分布式版本控制--2+day018 LeetCode235 701 450

基础操作: 1.分支: 几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离 开来进行重大的Bug修改、开发新的功能&#xff0c;以免影响开发主线。 2.指令操作: 2.1 查看本地分支: git branch 2.2 创建本地分支: git branch 分支名…

Spring Boot 3.3 新特性介绍

1. 引言 Spring Boot 3.1.x 停止维护了&#xff0c;而 3.3.x 作为最新发布的版本&#xff0c;带来了许多新特性和改进。本篇文章将详细介绍这些新特性&#xff0c;并通过样例代码加以解释&#xff0c;帮助开发者更好地掌握和应用这些新功能。 Spring Boot 3.3现已正式发布&…

RNN循环网络层

文章目录 1、简介2、RNN 网络原理3、PyTorch RNN 层的使用3.1、RNN送入单个数据3.2、RNN层送入批量数据 4、RNN三个维度4.1、解释4.2、输入数据的组织4.3、示例4.4、为什么需要这种格式&#xff1f;4.5、小结 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&a…

【博士每天一篇文献-算法】持续学习经典算法之LwF: Learning without forgetting

1 介绍 年份&#xff1a;2017 作者&#xff1a;Zhizhong Li&#xff0c;Amazon AWS Rekognition&#xff1b;Derek Hoiem&#xff0c;伊利诺伊大学计算机科学教授 会议&#xff1a;IEEE transactions on pattern analysis and machine intelligence 引用量&#xff1a;4325 Li…

【NXP-MCXA153】开发板救砖教程

前言 新手接触到NXP的板子时&#xff0c;一个不留神把调试的GPIO&#xff08;RXD、TXD&#xff09;改掉&#xff0c;很容易出现MDK Keil无法识别CMSIS-DAP调试器的情况&#xff1b;主控进入了莫名其妙模式导致调试器无法识别了&#xff0c;你根本无法下载程序&#xff0c;想改…

大数据-67 Kafka 高级特性 分区 分配策略 Ranger、RoundRobin、Sticky、自定义分区器

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

虚拟机Centos7 minimal版本安装docker

1、在 CentOS 7 上启用 EPEL 软件包存储库&#xff1b; &#xff08;删除epel软件包和其他操作可参考&#xff1a;如何在 CentOS 7 上使用 EPEL (linux-console.net)&#xff09; 1.1&#xff1a; 要安装epel前会报错&#xff0c;如下所示&#xff1a; 先参照这个链接安装&a…

【python】OpenCV—Image Super Resolution

文章目录 1、背景介绍2、准备工作3、EDSR4、ESPCN5、FSRCNN6、LapSRN7、汇总对比8、参考 1、背景介绍 图像超分&#xff0c;即图像超分辨率&#xff08;Image Super Resolution&#xff0c;简称SR&#xff09;&#xff0c;是指由一幅低分辨率图像或图像序列恢复出高分辨率图像…

HTML基础 - HTML5

目录 一. 简介 二. 新增元素 三. 拖放 地理定位 A、HTML5 拖放&#xff08;Drag and Drop&#xff09; B.HTML5 地理定位&#xff08;Geolocation&#xff09; 四. input 五. web存储 webSQL 六. 应用程序缓存 web workers 七. web socket 可以先看上篇HTML基础再来看…

RabbitMQ、Kafka对比(超详细),Kafka、RabbitMQ、RocketMQ的区别

文章目录 一、kafka和rabbitmq全面对比分析1.1 简介1.2 kafka和rabbitmq全面对比分析1.3 影响因素 二、RabbitMQ、Kafka主要区别2.1 详解/主要区别2.1.1 设计目标和适用场景2.1.2 架构模型方面2.1.3 吞吐量和性能2.1.4 消息存储和持久化2.1.5 消息传递保证2.1.6 集群负载均衡方…

理解二分搜索算法

一.介绍 在本文中&#xff0c;我们将了解二分搜索算法。二分搜索算法是一种在排序数组中查找特定元素的高效方法。它的工作原理是将搜索间隔反复分成两半&#xff0c;从而大大减少了找到所需元素所需的比较次数。该算法的时间复杂度为 O(log n)&#xff0c;因此对于大型数据集…

CLOS架构

CLOS Networking CLOS Networking 是指使用 Clos 网络拓扑结构&#xff08;Clos Network Topology&#xff09;进行网络设计的一种方法。该方法是由贝尔实验室的工程师 Charles Clos 在1950年代提出的&#xff0c;以解决电路交换网络的可扩展性和性能问题。随着现代计算和网络…

SpringBoot基础(一):快速入门

SpringBoot基础系列文章 SpringBoot基础(一)&#xff1a;快速入门 目录 一、SpringBoot简介二、快速入门三、SpringBoot核心组件1、parent1.1、spring-boot-starter-parent1.2、spring-boot-dependencies 2、starter2.1、spring-boot-starter-web2.2、spring-boot-starter2.3、…

YOLOv10改进 | 主干篇 | YOLOv10引入CVPR2023 顶会论文BiFormer用于主干修改

1. 使用之前用于注意力的BiFormer在这里用于主干修改。 YOLOv10改进 | 注意力篇 | YOLOv10引入BiFormer注意力机制 2. 核心代码 from collections import OrderedDict from functools import partial from typing import Optional, Union import torch import torch.nn as n…

C++:vector容器

概览 std::vector是C标准模板库(STL)中的一种动态数组容器。它提供了一种类似于数组的数据结构&#xff0c;但是具有动态大小和更安全的内存管理。 定义和基本特性 std::vector是C标准库中的一 个序列容器&#xff0c;它代表了能够动态改变大小的数组。与普通数组一样&#x…