ThreadLocal理解

ThreradLocal叫做線程本地變量,主要作用在于為變量在每一個(gè)獨(dú)立的線程創(chuàng)建一個(gè)副本,使得每個(gè)線程都可以訪問自己的內(nèi)部的變量副本,不會(huì)影響其他線程。

//ThreadLocal提供的方法
public T get()
public void set(T value)
public void remove()
protected T initialValue()

ThreadLocal如何為每個(gè)線程創(chuàng)建變量的副本

  • 在每個(gè)線程Thread內(nèi)部有一個(gè)ThreadLocal.ThreadLocalMap類型的成員變量threadLocals,這 個(gè)threadLocals就是用來存儲(chǔ)實(shí)際的變量副本的,鍵值為當(dāng)前ThreadLocal變量,value為變量副本(即T 類型的變量)
  • 初始時(shí),在Thread里面,threadLocals為空,當(dāng)通過ThreadLocal變量調(diào)用get()方法或者set()方法, 就會(huì)對(duì)Thread類中的threadLocals進(jìn)行初始化,并且以當(dāng)前ThreadLocal變量為鍵值,以ThreadLocal 要保存的副本變量為value,存到threadLocals。
  • 然后在當(dāng)前線程里面,如果要使用副本變量,就可以通過get方法在threadLocals里面查找
/**
 * @author:wangjie
 * @create:2022-09-20 16:58
 * @Description:
 */
public class ThreadLocalConfig {
    private static ThreadLocal<Long> id = new ThreadLocal<>();
    private static ThreadLocal<String> name = new ThreadLocal<>();
    public static void set(){
        id.set(Thread.currentThread().getId());
        name.set(Thread.currentThread().getName());
    }
    public static Long getLong(){
        return id.get();
    }
    public static String getString(){
        return name.get();
    }

    public static void main(String[] args) {
        ThreadLocalConfig.set();
        System.out.println(ThreadLocalConfig.getLong());
        System.out.println(ThreadLocalConfig.getString());
        new Thread(){
            @Override
            public void run() {
                ThreadLocalConfig.set();
                System.out.println(ThreadLocalConfig.getLong());
                System.out.println(ThreadLocalConfig.getString());
            }
        }.start();
    }
}

結(jié)果


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 java內(nèi)存模型 java虛擬機(jī),模仿真實(shí)的計(jì)算機(jī)結(jié)構(gòu),為java中各個(gè)變量、實(shí)例分配內(nèi)存空間。主要有: 方...
    對(duì)面的你閱讀 245評(píng)論 0 0
  • Thread 變量 threadLocals 線程類Thread內(nèi)部有一個(gè)名為threadLocals 的 Thr...
    _水杉閱讀 283評(píng)論 0 2
  • 1.ThreadLocal是什么? 首先介紹Thread類中屬性threadLocals:image.png我們發(fā)...
    手扶拖拉機(jī)_6e4d閱讀 410評(píng)論 0 0
  • 定義: 這個(gè)類給線程提供了一個(gè)本地變量,這個(gè)變量是該線程自己獨(dú)立擁有的 開放思維: 如果我們現(xiàn)在需要實(shí)現(xiàn)一個(gè)功...
    0愛上1閱讀 763評(píng)論 0 1
  • ThreadLocal類的介紹 ThreadLocal,從表面上讀英文的意思為線程本地變量,這樣也許更好理解了,就...
    西敏寺鐘聲閱讀 712評(píng)論 2 1

友情鏈接更多精彩內(nèi)容