2.線程封閉之Threadlocal

ThreadLocal變量

​ 是java裏特殊的變量

他是一個線程級別的變量,每個線程都有一個ThreadLocal,就是每個線程都擁有了自己獨立的一個變量,競爭條件被消除,在併發模式下是絕對安全的變量。

示例:

//會自動在每個線程創建一個T的副本,副本之間相互獨立,互不影響
ThreadLocal<T> var = new ThreadLocal<T>();

可以簡單理解爲:JVM維護了一個Map<Thread,T>,每個線程要用到T時,用當前線程去Map裏取,僅供理解。

使用場景

在實際分佈式項目中ThreadLocal變量經常不可獲缺,我們經常需要去當前請求者的信息,一般都會放在上下文中,通過ThreadLocal變量進行存儲。然後rpc過程中傳遞ThreadLocal變量。

public class Sessioner {

    /** 上下文 */
    private static final ThreadLocal<Session> cxt = ThreadLocal.withInitial(Session::new);

    public static void clear() {
        CTX.remove();
    }

    public static Session context() {
        return cxt.get();
    }

    public static void init(Session session) {
        CTX.set(session);
    }
}

上一篇:1.java線程狀態和線程通信
下一篇:3.線程池的使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章