ThreadLocal 的个人理解

ThreadLocal 的个人理解

ThreadLocal 是一个经常出现在线程安全里面的类。其主要作用是为每个线程保存自己的独享变量。以下内容,简单从其数据结构,重要的方法,作用来介绍下这个类。

定义:线程的变量副本,实现线程隔离。

1. 应用场景:线程安全的日志类:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8f92f811-2e84-47c7-9eb2-fae7510584a0/Untitled.png

2.从main方法开始,ThreadLocal 的使用过程:set 才能有值,或者 withInitial 方法,不能remove

private static ThreadLocal<String> threadLocal1 = new ThreadLocal<>();
private static ThreadLocal<Integer> threadLocal2 = ThreadLocal.withInitial(() -> 1000);

public void set(T var1) {
    Thread var2 = Thread.currentThread();  // threadID
    ThreadLocal.ThreadLocalMap var3 = this.getMap(var2); // threadLocal1--->threadID
    if (var3 != null) {
       var3.set(this, var1);
    } else {
        this.createMap(var2, var1);
    }
}

public T get() {
        Thread var1 = Thread.currentThread();
        ThreadLocal.ThreadLocalMap var2 = this.getMap(var1);
        if (var2 != null) {
            ThreadLocal.ThreadLocalMap.Entry var3 = var2.getEntry(this);
            if (var3 != null) {
                Object var4 = var3.value;
                return var4;
            }
        }

        return this.setInitialValue();
    }

3. new Thread 的时候,怎么成功 ”初始化“ ThreadLocal

4. 结构图

ThreadLocal 是通过“继承”来给子线程传递的,每次调用的时候,判断有没有值,没有的话,使用默认值。

0 0 vote
Article Rating
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments