Java多線程之ThreadLocal的特點

ThreadLocal用於提供線程的局部變量,在多線程環境裏,每個線程的局部變量獨立於其他線程的局部變量。也就是說 ThreadLocal 可以爲每個線程創建一個【單獨的變量副本】,相當於線程的 private static 類型變量。

ThreadLocal 的作用和同步機制有些相反:同步機制是爲了保證多線程環境下數據的一致性;而 ThreadLocal 是保證了多線程環境下數據的獨立性。

舉個例子,看代碼:

    public static void main(String[] args) {
        string="main";
        threadLocal.set("main");
        Thread thread =new Thread(new Runnable() {
            public void run() {
                string="thread";
                threadLocal.set("thread");
                System.out.println("子線程的string變量值爲:"+string);
                System.out.println("子線程的threadLocal變量值爲:"+threadLocal.get());
            }
        });
        thread.start();
        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("主線程的string變量值爲:"+string);
        System.out.println("主線程的threadLocal變量值爲:"+threadLocal.get());
    }
}

在上面的類中有兩個變量,一個是普通的String變量,一個是ThreadLocal類型的變量,分別在主線程和子線程中給它們賦值,結果如下:

在這裏插入圖片描述
從結果中可以看到普通的String變量在不同的線程中會被改變,也就是多個線程對於這個變量有相互間的影響,而ThreadLocal類型的變量則保證了多個線程之間變量的獨立性。

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