threadlocal作用:
為每個執行緒建立乙個副本,然後當前執行緒修改了該副本的值後而不會影響其他執行緒的值,各個變數之間相互不影響。注意:每個執行緒在獲取例項中的值時,必須先對改值進行初始化,否知獲得的值為null。
**示例如下:
public class threadlocaltest
}
執行結果如下:
threadlocal 類圖結構如下:
原始碼中的定義:
1 static final class suppliedthreadlocal extends threadlocal,suppliedthreadlocal是threadlocal的靜態內部類。
2 static class threadlocalmap,threadlocalmap也是threadlocal的靜態內部類。
3 static class entry extends weakreference> ,entry 是 threadlocalmap的靜態內部類。
threadlocal原始碼分析:
我們先來看下threadlocal的主要方法實現:
1 threadlocal中set(t value) 方法解析如下:
public void set(t value)
//根據當前執行緒獲取當前執行緒的threadlocalmap
threadlocalmap getmap(thread t)
//key為threadlocal例項,value為設定的值,將key-value放入entry中。
private void set(threadlocal> key, object value)
if (k == null)
}tab[i] = new entry(key, value);
int sz = ++size;
if (!cleansomeslots(i, sz) && sz >= threshold)
rehash();
}//如果當前執行緒的threadlocalmap
void createmap(thread t, t firstvalue)
threadlocalmap(threadlocal> firstkey, object firstvalue)
2 threadlocal中get()方法解析如下:
public t get()
}return setinitialvalue();
}// 對threadlocal進行初始化,如果沒有在**中顯示設定,則setinitialvalue() 的返回值為null。
private t setinitialvalue()
protected t initialvalue()
threadlocal 記憶體洩漏:先來看下threadlocal.threadlocalmap.entry 的類圖結構:
原始碼中的定義如下:
static class entry extends weakreference>
}
public void remove()
private void remove(threadlocal> key) }}
ifdef cplusplus深度剖析
時常在cpp的 之中看到這樣的 ifdef cplusplus extern c endif 這樣的 到底是什麼意思呢?首先,cplusplus是cpp中的自定義巨集,那麼定義了這個巨集的話表示這是一段cpp的 也就是說,上面的 的含義是 如果這是一段cpp的 那麼加入extern c 處理其中的 ...
深度剖析ostream
雖然c 學了大半個月了,自己學了解了很多關於c 的知識,大的概念懂了不少,但是還是想說想要徹底的弄懂c 絕非易事。當別人問到乙個很小的知識點些許你都要愣很久,事實告訴我們不能太好高騖遠。為什麼要寫ostream而不是istream,因為當我們自定義型別 student類 的時候,如果需要輸出 stu...
MapReduce 深度剖析
mapreduce 深度剖析 在hadoop2.x大行其道的年代,其優秀的資源管理框架 系統 高可用的分布式儲存系統,備受企業青睞。然因上述之惑,往往不能盡得其中之深意。此篇部落格筆者為大家一一解惑。雖說我們能夠編寫乙個完成mapreduce程式,並執行它。然其執行的細節,我們卻未必清楚,往往初學者...