當(dāng)使用ThreadLocal維護(hù)變量時(shí),ThreadLocal為每個(gè)使用該變量的線程提供獨(dú)立的變量副本,所以每一個(gè)線程都可以獨(dú)立地改變自己的副本,而不會(huì)影響其它線程所對應(yīng)的副本。
大神鏈接:http://blog.csdn.net/qq_23547831/article/details/50751687
四個(gè)方法
void set(Object value)設(shè)置當(dāng)前線程的線程局部變量的值。
public Object get()該方法返回當(dāng)前線程所對應(yīng)的線程局部變量。
public void remove()將當(dāng)前線程局部變量的值刪除,目的是為了減少內(nèi)存的占用,該方法是JDK 5.0新增的方法。需要指出的是,當(dāng)線程結(jié)束后,對應(yīng)該線程的局部變量將自動(dòng)被垃圾回收,所以顯式調(diào)用該方法清除線程的局部變量并不是必須的操作,但它可以加快內(nèi)存回收的速度。
protected Object initialValue()返回該線程局部變量的初始值,該方法是一個(gè)protected的方法,顯然是為了讓子類覆蓋而設(shè)計(jì)的。這個(gè)方法是一個(gè)延遲調(diào)用方法,在線程第1次調(diào)用get()或set(Object)時(shí)才執(zhí)行,并且僅執(zhí)行1次。ThreadLocal中的缺省實(shí)現(xiàn)直接返回一個(gè)null。
ThreadLocal是解決線程安全問題一個(gè)很好的思路,它通過為每個(gè)線程提供一個(gè)獨(dú)立的變量副本解決了變量并發(fā)訪問的沖突問題。在很多情況下,ThreadLocal比直接使用synchronized同步機(jī)制解決線程安全問題更簡單,更方便,且結(jié)果程序擁有更高的并發(fā)性。
ThreadLoacalmap是保存線程和對象的一個(gè)集合, 內(nèi)部結(jié)構(gòu)是一個(gè)數(shù)組, 很有意思的數(shù)組,[1, 1, 3, 3, 5, 5], 第一個(gè)是key, 第二個(gè)是值, 第三個(gè)是key 第四個(gè)是值, intersting