91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

陕西省| 康定县| 平乐县| 阳朔县| 梓潼县| 北海市| 枞阳县| 抚顺市| 商洛市| 汶川县| 新民市| 县级市| 济阳县| 阿拉善盟| 资中县| 凤翔县| 黄骅市| 许昌县| 斗六市| 洪江市| 百色市| 丰都县| 湖南省| 宁陵县| 临沭县| 广州市| 阜南县| 阿鲁科尔沁旗| 伊春市| 金平| 潮州市| 兴山县| 朝阳市| 彰化市| 武冈市| 专栏| 奉贤区| 北碚区| 兴和县| 昆明市| 彭水|