ThreadLocal終極突破

2021-08-30 16:56:20 字數 1105 閱讀 3491

threadlocal是什麼?

它並不是乙個thread,而是thread local variable(執行緒區域性變數)。 threadlocal類介面很簡單,只有4個方法:

void set(object value)

設定當前執行緒的執行緒區域性變數的值。

public object get()

該方法返回當前執行緒所對應的執行緒區域性變數副本。

public void remove()

將當前執行緒區域性變數的值刪除。不是必須的操作,但它可以加快記憶體**的速度。

protected object initialvalue()

返回該執行緒區域性變數的初始值。

其中,常用的是set和get方法。而在jdk5.0以後,threadlocal開始支援泛型。這就使得threadlocal使用起來非常的方便。

threadlocal與其它同步機制的比較

threadlocal和其它同步機制相比有什麼優勢呢?threadlocal和其它所有的同步機制都是為了解決多執行緒中的對同一變數的訪問衝突,在普通的同步機制中,是通過物件加鎖來實現多個執行緒對同一變數的安全訪問的。這時該變數是多個執行緒共享的,使用這種同步機制需要很細緻地分析在什麼時候對變數進行讀寫,什麼時候需要鎖定某個物件,什麼時候釋放該物件的鎖等等很多。所有這些都是因為多個執行緒共享了資源造成的。threadlocal就從另乙個角度來解決多執行緒的併發訪問,threadlocal會為每乙個執行緒維護乙個和該執行緒繫結的變數的副本,從而隔離了多個執行緒的資料,每乙個執行緒都擁有自己的變數副本,從而也就沒有必要對該變數進行同步了。threadlocal提供了執行緒安全的共享物件,在編寫多執行緒**時,可以把不安全的整個變數封裝進threadlocal,或者把該物件的特定於執行緒的狀態封裝進threadlocal。

總結當然threadlocal並不能替代同步機制,兩者面向的問題領域不同。同步機制是為了同步多個執行緒對相同資源的併發訪問,是為了多個執行緒之間進行通訊的有效方式;而threadlocal是隔離多個執行緒的資料共享,從根本上就不在多個執行緒之間共享資源(變數),這樣當然不需要對多個執行緒進行同步了。所以,如果你需要進行多個執行緒之間進行通訊,則使用同步機制;如果需要隔離多個執行緒之間的共享衝突,可以使用threadlocal,這將極大地簡化你的程式,使程式更加易讀、簡潔。

突破SQL的xp cmdshell恢復終極方法

sql server 2005下開啟xp cmdshell的辦法 以下是引用片段 exec sp configure show advanced options 1 reconfigure exec sp configure xp cmdshell 1 reconfigure sql2005開啟 o...

終極演算法 2 終極演算法

機器學習的應用非常廣泛,更為驚人的是,相同的演算法可以完成不同的事。在機器學習領域之外,如果你要解決不同的問題,就得編寫兩個不同的程式。相同的機器學習演算法不僅可以完成無窮無盡且不同的事,而且和被它們替代的傳統演算法相比,它們要簡單得多。多數學習演算法可能只有數百行或者數千行。相比之下,傳統程式則需...

ThreadLocal個人理解

為了加深理解,將最近對threadlocal的了解和原始碼分析記錄總結一下。threadlocal可以為執行緒提供區域性變數。使用threadlocal的get 方法,可以在當前執行緒能夠訪問的類和方法中,得與當前執行緒相關聯的變數值。不過,執行緒區域性變數並不是由threadlocal物件儲存維護...