• ThreadLocal是什么?


    1、ThreadLocal是什么?

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

    2、ThreadLocal的应用场景有哪些?

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

    3、ThreadLocal怎么用?

    下述程序,我们声明了一个ThreadLocal,并且声明了十个不同线程,分别使用get()打印出各自set()的内容

    1. public class ThreadLocalTest {
    2. public static void main(String[] args) {
    3. ThreadLocal local = new ThreadLocal<>();
    4. IntStream.range(0, 10).forEach(i -> new Thread(() -> {
    5. local.set(Thread.currentThread().getName() + ":" + i);
    6. System.out.println("线程:" + Thread.currentThread().getName() + ",local:" + local.get());
    7. }).start());
    8. }
    9. }
    1. 输出结果:
    2. 线程:Thread-0,local:Thread-0:0
    3. 线程:Thread-1,local:Thread-1:1
    4. 线程:Thread-2,local:Thread-2:2
    5. 线程:Thread-3,local:Thread-3:3
    6. 线程:Thread-4,local:Thread-4:4
    7. 线程:Thread-5,local:Thread-5:5
    8. 线程:Thread-6,local:Thread-6:6
    9. 线程:Thread-7,local:Thread-7:7
    10. 线程:Thread-8,local:Thread-8:8
    11. 线程:Thread-9,local:Thread-9:9

     从结果可以看到,每一个线程都有我们自己设置的local值。

    4、 ThreadLocal源码分析

    这里就直接写总结,方便大家快速了解。

    官方的说:在ThreadLocal中定义了一个ThreadLocalMap静态内部类,在里面定义了Entry 来保存数据。在Entry内部使用ThreadLocal作为key,使用我们设置的值作为value。这样就可以通过ThreadLocal来找到我们设置的value。对于每个线程内部有个ThreadLocal.ThreadLocalMap 变量,存取值的时候,也是从这个容器中来获取。

    通俗的说:TreadLocal里面有一个表,表里面映射着我们存放的内容,要用的时候就拿呗。

  • 相关阅读:
    技术成长之路:人工智能
    实验三--贪心算法的设计与分析
    开发工程师必备————【Day26】Django补充(三)
    面试中的常问的C++ STL 概念和函数
    链表应用(C++,递增合并、递增求交集、逆序、删除区间)
    Spring Boot是什么呢?
    MySQL的级联操作
    FreeSQL 基本使用
    Xilinx FPGA 7系列 GTX/GTH Transceivers (5)-- Aurora 8b10b 信号传输实战--小试牛刀
    公众号迁移公证线上怎么办?
  • 原文地址:https://blog.csdn.net/m0_56190554/article/details/128028532