中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ThreadLocal是如何和各個Thread之間建立起關聯的

發布時間:2021-12-17 14:35:39 來源:億速云 閱讀:172 作者:柒染 欄目:大數據

本篇文章為大家展示了ThreadLocal是如何和各個Thread之間建立起關聯的,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

我們來看 ThreadLocal 是如何和各個 Thread 之間建立起關聯的呢?

我們來看,每個Thread,都有這樣一個屬性,一個ThreadLocal.ThreadLocalMap的屬性,能互不影響的秘密都在這里。

/* ThreadLocal values pertaining to this thread. This map is maintained

     * by the ThreadLocal class. */

    ThreadLocal.ThreadLocalMap threadLocals = null;

這個ThreadLoalMap是什么時候被設置值的呢?

我們來看ThreadLocal的使用。

一般的用法是:

ThreadLocal<Integer> local = new ThreadLocal<Integer>() {

protected Integer initialValue() {

                    return 1;

                }

};

然后使用這個ThreadLocal變量進行set和get操作。

set的時候,會先判斷對于當前線程,是否已經分配了map,沒有則創建。

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就是根據當前線程的 theThreadLocals 屬性來判斷的

ThreadLocalMap getMap(Thread t) {

    return t.threadLocals;

}

那createMap的時候,就會給當前線程的threadLocals賦值

void createMap(Thread t, T firstValue) {

    t.threadLocals = new ThreadLocalMap(this, firstValue);

}

這個ThreadLocalMap里是以數組的形式放的多個Entry。

在 get 的時候,如果沒數據會根據上面的initValue方法創建一個新的返回。這樣多個線程用的就是不同的東西了。

那這里還有一點,對于不同的東西, ThreadLocal 可以通過泛型做區分,當然你也能一股腦的放到一起,那取的時候就費勁了。

上述內容就是ThreadLocal是如何和各個Thread之間建立起關聯的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巍山| 阳西县| 张家川| 孟州市| 仁化县| 宁津县| 高平市| 灌云县| 张家界市| 界首市| 大关县| 建湖县| 湘潭县| 黄龙县| 萝北县| 南城县| 武隆县| 文昌市| 靖远县| 德兴市| 将乐县| 鱼台县| 德化县| 怀安县| 特克斯县| 大足县| 茶陵县| 乌拉特前旗| 丽江市| 杭州市| 开江县| 大庆市| 萨迦县| 上饶市| 吉木萨尔县| 曲水县| 溧水县| 祁阳县| 彭阳县| 玛纳斯县| 绩溪县|