ThreadLocal使用介紹

2021-08-30 21:13:08 字數 2102 閱讀 5848

首先有幾點需要大家清楚的: 1、

threadlocal

只是對需要儲存的物件的管理,而儲存實際是由當前thread

負責。個人理解為threadlocal

是乙個操作thread. threadlocals

的工具。 2、

使用threadlocal

可以使物件達到執行緒隔離的目的。同乙個threadlocal

操作不同的thread

,實質是各個thread

對自己的變數操作。 3、

為什麼要使用threadlocal

,個人感覺有兩個原因,1

是與其它執行緒的隔離,2

是可以在乙個執行緒的生命週期中使用同乙個物件,達到物件傳遞的作用。這樣的好處是可以減少dal

訪問或者ws

呼叫。

我這裡列出乙個用到threadlocal

的例子,主要的作用是使用threadlocal

記錄使用者資訊以及記錄使用者的執行時間。這在實際應用中,可以對映為全域性記錄使用者的許可權,以及使用threadlocal

對系統的效能做一些分析等。。

首先有兩個物件,乙個是使用者物件

// 簡單記錄使用者是否可以訪問,可以用於全域性許可權控制等

class user

public string getname()

public boolean isallow()

@override

public string tostring()

}

另乙個是消費時間物件

// 用於記錄每一步驟耗時…,可以用於每一步的效能分析

class timeconsumer

public void andstep(long step)

@override

public string tostring()

return br.tostring();

}}

接下來,建立乙個對這兩個物件管理的threadlocal

的類

// threadlocal 管理類

class mythreadlocal

public static mythreadlocal getinstanse()

public void adduser(user user)

public user getuser()

public void addtime(timeconsumer timeconsumer)

public void addtime(long l)

public timeconsumer gettime()

}

接下來就可以對threadlocal

進行測試了。為了模擬多執行緒,我這裡自己實現了多執行緒

public class corethreadlocal 

}// 用於測試,多執行緒實現

class testrunnable implements runnable

public void run()

// 模擬具體業務的處理步驟

private void dothings(long l) catch (interruptedexception e)

}}

執行上面的程式得到結果如下:

使用者名稱:name2	 是否允許訪問:true

操作[name2]共有2步

|--耗時[703ms]

|--耗時[1406ms]

使用者名稱:name3 是否允許訪問:false

操作[name3]共有2步

|--耗時[891ms]

|--耗時[1781ms]

使用者名稱:name1 是否允許訪問:true

操作[name1]共有2步

|--耗時[1000ms]

|--耗時[2000ms]

通過上面的測試程式,可以大概了解threadlocal

的使用方法以及作用。

如果要深入使用,建議還是看下原始碼吧…

ThreadLocal介紹及其原理

threadlocal可以設定儲存屬於當前執行緒的物件,存在當前執行緒 currentthread 的threadlocals中,threadlocals是threadlocalmap類的物件。threadlocal的作用 儲存單個執行緒上下文資訊。比如儲存id等 減少引數傳遞。比如做乙個trace...

ThreadLocal使用案例

本文藉由併發環境下使用執行緒不安全的 dateformat優化案例,幫助大家理解threadlocal.public class dateutil catch parseexception e 首先分析下 該處的函式parseymdhms 使用了synchronized修飾,意味著該操作是執行緒不安...

Java事務 三 使用ThreadLocal

一.為什麼使用threadlocal 如果涉及到呼叫多個service,那我是不是還得從controller層傳遞connection?從而不會影響其他執行緒中的例項變數,所以threadlocal可以實現執行緒範圍內資料共享。二.如何使用threadlocal 1.寫乙個transactionma...