首页 > 其他分享 >深入理解ThreadLocal

深入理解ThreadLocal

时间:2023-03-04 19:36:58浏览次数:33  
标签:变量 Thread ThreadLocal 理解 线程 深入 local

在java的多线程模块中,ThreadLocal是经常被提问到的一个知识点 ,因此只有理解透彻了,不管怎么问,都能游刃有余。

本文主要从以下几个角度来分析理解

  • 1、ThreadLocal是什么
  • 2、ThreadLocal怎么用
  • 3、ThreadLocal源码分析
  • 4、ThreadLocal内存泄漏问题

以下源码均基于jdk1.8。

1. ThreadLocal是什么?

从名字我们就可以看到ThreadLocal 叫做本地线程变量,意思是说,ThreadLocal 中填充的的是当前线程的变量,该变量对其他线程而言是封闭且隔离的,ThreadLocal 为变量在每个线程中创建了一个副本,这样每个线程都可以访问自己内部的副本变量。

从字面意思很容易理解,但是实际角度就没那么容易了,作为一个面试常问的点,使用场景也是很丰富。

  • 1、在进行对象跨层传递的时候,使用ThreadLocal可以避免多次传递,打破层次间的约束。
  • 2、线程间数据隔离
  • 3、进行事务操作,用于存储线程事务信息。
  • 4、数据库连接,Session会话管理。

现在相信你已经对ThreadLocal有一个大致的认识了,下面我们看看如何用?

2. ThreadLocal怎么用?

下面让我们来看一个例子:

import java.util.stream.IntStream;

public class ThreadLocalTest {

    public static void main(String[] args) {

        ThreadLocal<String> local = new ThreadLocal<>();

        IntStream.range(0, 10).forEach(i -> new Thread(() -> {
            local.set(Thread.currentThread().getName() + ":" + i);
            System.out.println("线程:" + Thread.currentThread().getName() + ",local:" + local.get());
        }).start());
    }

}

 

标签:变量,Thread,ThreadLocal,理解,线程,深入,local
From: https://www.cnblogs.com/cgli/p/17178889.html

相关文章

  • 深入浅出通信原理
    https://www.txrjy.com/thread-394879-1-4.html 从2010年4月8日开始在C114通信人家园上线连载,从多项式乘法讲起,一步一步引出卷积、傅立叶级数展开、旋转向量、三维频谱......
  • python __new__()的理解
    最近在学python做接口自动化,在封装log模块时,老师没有继承logging模块,而是在自己封装的MyLogger类中的__new__方法中返回了一个logging对象自己封装的MyLogger类中就只......
  • 1.为何try里面放return,finally还会执行,理解其内部机制
    涉及到了一种数据类型:Completion,是js七大标准类型之一为何try里面放return,finally还会执行这种行为就是因为CompletionRecord,在js中,每条语句的执行完成状态都是由Comple......
  • 8.理解模块化解决的实际问题,可列举几个模块化方案并理解其中原理
    1.什么是模块将一个复杂的程序依据一定的规则(规范)封装成几个块(文件),并进行组合在一起块的内部数据与实现是私有的,只是向外部暴露一些接口(方法)与外部其它模块通......
  • java——spring boot集成kafka——kafka介绍以及概念理解
                  首先,让我们来看一下基础的消息(Message)相关术语:名称解释Broker消息中间件处理节点,⼀个Kafka节点就是⼀个broker,⼀个......
  • [TJOI2010] 阅读理解
    洛谷题意:给定\(N\)篇短文,每篇短文由\(L\)个单词组成,且只含小写字母;做\(M\)次询问,每次给定一个单词,求该单词在哪几篇短文中出现过。对于\(100\%\)的数据,\(1\leM\le10^4......
  • numpy深度学习常用函数及参数理解(axis, keepdims)
    axis:以axis=0为例,则沿着第0个下标(最左边的下标)变化的方向进行操作,也就是将除了第0个下标外,其他两个下标都相同的部分分成一组,然后再进行操作例如一个3*3的二维数组A(3,......
  • 3.理解JavaScript的执行上下文、执行上下文栈,可以应用堆栈信息快速定位问题
    1.执行上下文执行上下文就是当前JavaScript代码被解析和执行时所在环境的抽象概念,JavaScript中运行任何的代码都是在执行上下文中运行1.执行上下文的类型全局执行......
  • 2.理解JavaScript的作用域和作用域链
    什么是作用域Javascript中的作用域说的是变量的可访问性和可见性。也就是说整个程序中哪些部分可以访问这个变量,或者说这个变量都在哪些地方可见。作用域的类型全局作......
  • 1.理解词法作用域和动态作用域
    作用域?什么是作用域?作用域就是指程序源代码中定义变量的区域作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。js采用词法作用域,也就是静态作用域。动......