美文网首页
线程本地变量 ThreadLocal

线程本地变量 ThreadLocal

作者: 橙味菌 | 来源:发表于2019-10-03 17:01 被阅读0次

不能解决共享变量的并发问题,只能维护本线程变量

作用 API
创建本地线程变量 ThreadLocal()
获取当前线程存放的变量 get()
设置当前线程要存放的变量 set(T value)
移除当前线程的变量 remove()

原理
各线程持有一个用于存放变量的map(ThreadLocalMap),以变量对应的ThreadLocal自身为键

应用场景
数据库连接
Session管理

//获取线程中本地变量map的值(键为当前ThreadLocal)
public T get() {
    Thread t = Thread.currentThread();
    ThreadLocalMap map = getMap(t);
    if (map != null) {
        ThreadLocalMap.Entry e = map.getEntry(this);
        if (e != null) {
            @SuppressWarnings("unchecked")
            T result = (T)e.value;
            return result;
        }
    }
    return setInitialValue();
}

/**
     * Variant of set() to establish initialValue. Used instead
     * of set() in case user has overridden the set() method.
     *
     * @return the initial value
     */
private T setInitialValue() {
    T value = initialValue();
    Thread t = Thread.currentThread();
    ThreadLocalMap map = getMap(t);
    if (map != null)
        map.set(this, value);
    else
        createMap(t, value);
    return value;
}

//设置线程中本地变量map的值(键为当前ThreadLocal)
public void set(T value) {
    Thread t = Thread.currentThread();
    ThreadLocalMap map = getMap(t);
    if (map != null)
        map.set(this, value);
    else
        createMap(t, value);
}

//移除线程中本地变量map的值(键为当前ThreadLocal)
public void remove() {
    ThreadLocalMap m = getMap(Thread.currentThread());
    if (m != null)
        m.remove(this);
}

//获取线程的本地变量map
ThreadLocalMap getMap(Thread t) {
    return t.threadLocals;
}

//为线程初始化其本地变量map
void createMap(Thread t, T firstValue) {
    t.threadLocals = new ThreadLocalMap(this, firstValue);
}

相关文章

  • ThreadLocal学习

    描述 ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储。ThreadLocal为变量在...

  • ThreadLocal

    ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储。ThreadLocal为变量在每个线...

  • ThreadLocal及其扩展

    ThreadLocal ThreadLocal是线程本地变量,每个线程往这个ThreadLocal中读写是线程隔离...

  • JDK ThreadLocal解析

    Java ThreadLocal解析 ThreadLocal 线程本地变量, 线程私有, 在 Thread 类中用...

  • 4-6 ThreadLocal

    一、什么是ThreadLocal java.lang.ThreadLocal,线程本地变量,也叫线程局部变量。。通...

  • Java并发编程三之ThreadLocal

    ThreadLocal--线程本地变量,也称为线程本地存储。ThreadLocal可以让每个线程 拥有一个属于自...

  • ThreadLocal源码解读

    每个线程都有一个ThreadLocal线程本地变量,各个线程本地变量互不干扰。TreadLocalMap类型的变量...

  • ThreadLocal 作用

    ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,ThreadLocal 的作用是提供...

  • ThreadLocal使用

    ThreadLocal是什么 ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意...

  • 线程知识补全(大厂必问)

    ThreadLocal定义 线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。ThreadLocal可以让...

网友评论

      本文标题:线程本地变量 ThreadLocal

      本文链接:https://www.haomeiwen.com/subject/mcwdpctx.html