在我們程式設計時,如果遇到多個執行緒訪問同乙個變數應該怎樣實現?有人說使用同步。是的同步可以解決這種問題,但它是有弊端的,涉及到何時加鎖與釋放鎖等並且執行緒訪問鎖時需要等待,這樣很浪費時間。有乙個更好的方案就是使用threadlocal工具類,之前參加了乙個專案,本專案涉及到分庫,在業務進行中需要根據唯一的id去定位資料來源然後做一系列的操作。
threadlocal不是用來解決共享資源的多執行緒訪問的問題, hreadlocal的set()方法設定到執行緒的threadlocal.threadlocalmap裡的是執行緒自己要儲存的物件,其他執行緒訪問不到。各個執行緒中的threadlocal.threadlocalmap以及threadlocal.threadlocal中的值都是不同的物件。
下面看一下定位與設定資料來源的工具類
/**
* 在threadlocal中儲存當前執行緒需要使用的string。
* * @author wangzuojia
*/public class datasourcecontextholder
public static string determinecurrentlookupkey()
public static string getdatasource()
return dbtype; }
public static string getdefaultdatasource()
public static void clearstring()
}
下面看一下如何使用獲取資料源的工具類
// 獲取正在使用的dbtype
string olddbtype = datasourcecontextholder.getdatasource();
try finally
} }這樣多執行緒在訪問資料來源時,就可以做到互不干擾。
ThreadLocal作用,原理
threadlocal一般被稱為執行緒池本地變數或執行緒本地儲存。起作用是為 當前執行緒 提供乙個臨時持有和傳遞物件的方法。由同乙個執行緒鎖執行的 只要持有同乙個threadlocal物件的引用,就都能訪問到與當前執行緒繫結的同乙個資料物件。threadlocal的內部宣告乙個自動定義的thread...
ThreadLocal的作用和原理
threadlocal是用來建立當前執行緒的區域性變數的類,建立的變數只能被當前執行緒訪問和修改 原理 set方法的原理 1.首先獲取當前執行緒物件 2.利用當前執行緒獲取threadlocalmap物件 3.如果threadlocalmap物件不為空,則設定值,否則建立這個map物件並設定值 由此...
ThreadLocal的作用和實現原理
threadlocal是乙個執行緒內部的資料儲存類,通過它可以在指定的執行緒中儲存資料,資料儲存以後,只有在指定的執行緒中可以獲取到儲存的資料,對於其他執行緒來說則無法取到資料。threadlocal的主要作用 輕鬆實現一些看起來很複雜的功能,適合以下一些應用場景。某些資料是以執行緒為作用域並且不同...