ThreadLocal 及其機制

2021-06-26 08:07:04 字數 1888 閱讀 4010

一:threadlocal類的例子:

某一線程中的區域性變數會被其他執行緒所改寫,所以有了threadlocal類,可以用這個類來儲存區域性變數,以保證區域性變數的安全!

以下兩個例子其中之一使用了threadlocal類,另乙個未用,注意觀察其結果的不同:

class unsafetask implements runnable catch (interruptedexception e) 

system.out.printf("thread finished: %s:%s\n", thread.currentthread().getid(),startdate); }}

public class test_unsafetask catch (interruptedexception e)

} }}

結果:
starting thread: 9:tue oct 14 20:31:36 cst 2014

starting thread: 10:tue oct 14 20:31:38 cst 2014

thread finished: 9:tue oct 14 20:31:38 cst 2014

starting thread: 11:tue oct 14 20:31:40 cst 2014

thread finished: 10:tue oct 14 20:31:40 cst 2014

thread finished: 11:tue oct 14 20:31:40 cst 2014

public class test_safetask  catch (interruptedexception e) 

} }}class safetask implements runnable

}; @override

public void run() catch (interruptedexception e)

system.out.printf("thread finished: %s : %s\n", thread.currentthread()

.getid(), startdate.get());

}}

其結果:

starting thread: 9 : tue oct 14 20:33:02 cst 2014

thread finished: 9 : tue oct 14 20:33:02 cst 2014

starting thread: 10 : tue oct 14 20:33:04 cst 2014

starting thread: 11 : tue oct 14 20:33:06 cst 2014

thread finished: 11 : tue oct 14 20:33:06 cst 2014

thread finished: 10 : tue oct 14 20:33:04 cst 2014

二:threadlocal類中的主要方法:

1.泛化的無參構造器,

大家看看吧,不解釋了,

3.threadlocal有乙個靜態的內部類threadlocalmap,通過這個map對執行緒中的區域性變數進行儲存,其key為當前執行緒的id,value既是你所儲存的變數,即初始化,改,查,移除都必須通過這個thread.currentthread().getid()的id進行,從而保證了區域性變數的安全。我們只看下set(t value)的原始碼就行:

public void set(t value)

ThreadLocal介紹及其原理

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

ThreadLocal使用場景及其優勢

曾經很疑惑threadlocal是幹什麼用?什麼場景下要用?查了幾篇文章,都說它的優勢是執行緒安全,想必他的作用就是為了執行緒安全吧。仔細理解後發現,原來我們常用的區域性變數和靜態變數,在某種情況下無法滿足要求,比如,我要求快取乙個變數,這個時候你肯定會說搞乙個靜態map存一下就ok了,但是有幾個問...

ThreadLocal分析以及其解決的問題

threadlocal是執行緒變數,填充的變數屬於當前執行緒。對於其他執行緒是隔離的,threadlocal為變數在每個執行緒中都建立了乙個副本,那麼每個執行緒可以訪問自己內部的副本變數。現在有這麼一種情況。解決方法 使用同乙個connection物件 author cbx date 2020 10...