threadLocal

复制代码
ThreadLocal 类为线程本地变量,用于存储变量:会和线程绑定,每个线程都有自己的ThreadLocal

重要方法:
    public T get() { }
    public void set(T value) { }
    public void remove() { }
    protected T initialValue() { }
    
使用方法:
    创建一个ThreadLocal对象,一个线程中可以有多个ThreadLocal对象:
        ThreadLocal<Long> longthreadLocal=new ThreadLocal<Long>();        //泛型指定这个线程本地变量存储值得类型
        ThreadLocal<String> stringthreadLocal=new ThreadLocal<String>();        
    
    Set()方法:
        调用set方法存值:
            longthreadLocal.set(100L);    //会获取到当前线程中的threadLocals,然后调用threadLocals的set方法设置值:key为longthreadLocal对象,value为100L
            
        执行流程:在每个线程Thread中都存在一个threadLocals的成员变量,用于存储当前线程本地变量(可以有多个,如longthreadLocal,stringthreadLocal)。
                    threadLocals为一个Map(ThreadLocalMap).这个map的key为threadLocal,值为threadLocal对应要保存的值
                    调用set()时,会获取到当前线程中的threadLocals,然后调用它的set方法向这个map中保存值,key为threadLocal本身,值为需要保存的值
                    
    get()方法:
        调用get方法取值:
            Long long1 = longthreadLocal.get();    //会获取到当前线程中的threadLocals,然后调用threadLocals的getEntry方法获取到键值对:key为longthreadLocal对象,value为100L。获取到值100L
            
        执行流程:调用get()时,也会获取到当前线程中的threadLocals,然后调用它的getEntry方法获取到与这个threadlocal对应的键值对:key为longthreadLocal对象,value为100L。获取到值100L
        
    remove()方法:清除当前本地变量保存的值:获取到当前线程中的threadLocals,删除当前ThreadLocal的键值对。调用完这个方法再调用get()方法,返回值为null.
    
    initialValue():初始化方法,底层通过这个方法设置线程本地变量默认值为null。在底层,调用get方法时,如果根据ThreadLocal对象找不到值,会返回这个默认值null。也可以重写这个方法,自己设置返回的默认值
    
复制代码
复制代码
示例代码:
public class ThreadLocalTest {
    
    public static void main(String[] args) {
        ThreadLocal<Long> longthreadLocal=new ThreadLocal<Long>();
        
        
        longthreadLocal.set(100L);
        Long long1 = longthreadLocal.get();
        
        longthreadLocal.remove();
        
        Long long2 = longthreadLocal.get();
        
        System.out.println(long1);
        System.out.println(long2);
    }
复制代码
运行结果:
100
null

 

https://www.cnblogs.com/dolphin0520/p/3920407.html

 

posted @   foreast  阅读(100)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示