一: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...