首页 > 其他分享 >Servlet26 - ThreadLocal

Servlet26 - ThreadLocal

时间:2023-01-25 11:34:04浏览次数:40  
标签:map set Thread value ThreadLocal 线程 Servlet26

ThreadLocal

线程本地变量,常用方法 get() set(obj),通过 set 方法在当前线程上存储数据,通过 get 方法在当前线程中获取数据

set 方法源码分析

public void set(T value) {
    
    Thread t = Thread.currentThread(); // 获取当前线程
    
    ThreadLocalMap map = getMap(t); // 每一个线程都维护一个各自线程的容器 ThreadLocalMap map
    
    if (map != null) {
        map.set(this, value); // 方法写在 ThreadLocal 中,this 是 ThreadLocal
        // key-value 通过 ThreadLocal 获取 value,一个 Thread 可以有多个 ThreadLocal
    } else {
        createMap(t, value); // 延迟初始化,定义是为 null,判断后再初始化创建一个 map
        // 第一次添加数据时,根据线程 Thread 进行初始化
    }
}

get 方法原码分析

public T get() {
    Thread t = Thread.currentThread();  // 获取当前线程
    ThreadLocalMap map = getMap(t);  // 获取与线程一一对应的 TreadLocalMap 容器集合
    if (map != null) {
        
        ThreadLocalMap.Entry e = map.getEntry(this); 
        // this 是 ThreadLocal对象,根据 ThreadLocal 获取 key-value 的入口 entry
        
        if (e != null) {
            @SuppressWarnings("unchecked")
            T result = (T)e.value; // 如果 entry 存在,则可以根据 entry 获取 value
            return result;
        }
    }
    return setInitialValue();
}

标签:map,set,Thread,value,ThreadLocal,线程,Servlet26
From: https://www.cnblogs.com/Ashen-/p/17066780.html

相关文章

  • ThreadLocal原理
    ThreadLocal含义ThreadLocal线程本地变量把变量与线程绑定在一起,为每一个线程维护一个独立的变量副本(因为是对象引用,堆中的对象是线程间共享的,所以ThreadLocal没有解决线......
  • 记录构造方法ThreadLocal赋值失败---
    省流:构造方法在主线程里跑的先贴代码publicclassTest{@SneakyThrowspublicstaticvoidmain(String[]args){ExecutorServiceexecute=Exec......
  • 【并发编程】ThreadLocal详解
    文章目录​​1.ThreadLocal简介​​​​2.ThreadLocal的简单使用​​​​3.ThreadLocal的实现原理​​​​4.ThreadLocal不支持继承性​​​​5.InheritableThreadLocal支持......
  • ThreadLocal作用
    Threadlocal特性1.线程间共享变量:一个线程在设置threadlocal值之后,当前线程无论在哪里都可以从设置的threadlocal中获取值,解决值传递的问题。2.不同线程间隔离:线程a在设......
  • 不规范使用ThreadLocal导致的bug,说多了都是泪
    ThreadLocal一般用于线程间的数据隔离,通过将数据缓存在ThreadLocal中,可以极大的提升性能。但是,如果错误的使用Threadlocal,可能会引起不可预期的bug,以及造成内存泄露。因为线......
  • ThreadLocal底层原理
    文章目录1.什么是ThreadLocal?2.ThreadLocal基本用法3.ThreadLocal的应用场景4.ThreadLocal底层原理5.强软弱引用之间的区别5.1强引用5.2软引用5.3弱引用5.4虚引用6.Thr......
  • ThreadLocal源码解析
    一、ThreadLocal概述ThreadLocal是一个线程的本地变量,也就意味着这个变量是线程独有的,是不能与其他线程共享的。这样就可以避免资源竞争带来的多线程的问题。但是,这种解......
  • 线程数据共享与安全-ThreadLocal
    1.ThreadLocal作用在一个线程中,线程安全的共享数据(实现在同一个线程中共享数据,从而解决多线程数据安全的问题)分析:1.数据:可以是普通变量,对象,数组等。(在一个线程中)一个数据......
  • ThreadLocal源码解析及实战应用
    作者:京东物流闫鹏勃1什么是ThreadLocal?ThreadLocal是一个关于创建线程局部变量的类。通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。而使用ThreadLocal......
  • ThreadLocal原理及使用场景
    ThreadLocalThreadLocal意为线程本地变量,用于解决多线程并发时访问共享变量的问题。所谓的共享变量指的是在堆中的实例、静态属性和数组;对于共享数据的访问受Java的内存模型......