與君共勉之ThreadLocal

技術 所見及所聞 所見及所聞 2017-08-29
  • ThreadLocal

JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal為解決多線程程序的併發問題提供了一種新的思路。使用這個工具類可以很簡潔地編寫出優美的多線程程序,ThreadLocal並不是一個Thread,而是Thread的局部變量。簡而言之,就是不同程序調用同一個ThreadLocal實例get()得到的實例是不一樣的。

ThreadLocal是如何做到為每一個線程維護變量的副本的呢?其實實現的思路很簡單:在ThreadLocal類中定義了一個ThreadLocalMap,每一個Thread中都有一個該類型的變量——threadLocals——用於存儲每一個線程的變量副本,Map中元素的鍵為線程對象,而值對應線程的變量副本。

其實ThreadLocal是一種用空間換時間的,因為如果你一個數據要多個線程一起使用不免要大量使用synchronized,而大量synchronized會導致性能下降,而ThreadLocal就是為了解決這個問題的。下面用一個例子來簡單使用它:

與君共勉之ThreadLocal

與君共勉之ThreadLocal

因為有人問我如何初始化,我就修改一下,下面的方法就是讓參數初始化

與君共勉之ThreadLocal

與君共勉之ThreadLocal

相關推薦

推薦中...