聊聊ThreadLocal原始碼 基於JDK1 8

2022-03-23 07:40:27 字數 1183 閱讀 8559

原文:

主要方法:

public t get() 

}return setinitialvalue();

}

public void set(t value) 

下面**時樓主認為threadlocal中比較重要的,還是比較容易看懂的,就不在一一細說

public class threadlocal> 

/*** 除非執行緒先前呼叫了方法,在這種情況下,initialvalue方法不會 為該執行緒呼叫。

* 通常,每個執行緒最多呼叫一次此方法,但在後續呼叫後跟時可能會再次呼叫此方法。

* 這個實現只是返回; 如果程式設計師希望執行緒區域性變數的初始值不是,

* 則必須對子**進行子類化,並重寫此方法。 通常,將使用匿名內部類。

*/protected t initialvalue()

public t get()

}return setinitialvalue();

}private t setinitialvalue()

public void set(t value)

/*** suppliedthreadlocal是jdk8新增的內部類,只是擴充套件了threadlocal的初始化值的方法而已

* ,允許使用jdk8新增的lambda表示式賦值。需要注意的是,函式式介面supplier不允許為null。

*/static final class suppliedthreadlocal> extends threadlocal>

@override

protected t initialvalue()

}/**

* threadlocalmap是定製的hashmap,關於hashmap的更詳細的問題請參看《聊聊hashmap原始碼》,

* 僅用於維護當前執行緒的本地變數值。僅threadlocal類對其有操作許可權,

* 是thread的私有屬性。為避免占用空間較大或生命週期較長的資料常駐於記憶體引發一系列問題,

* hash table的key是弱引用weakreferences。當空間不足時,會清理未被引用的entry。

*/static class threadlocalmap {

static class entry extends weakreference

ThreadLocal總結 jdk1 8原始碼

threadlocal為每個使用它的執行緒提供乙個變數的副本。threadlocal中的主要方法 public void set t value public void set t value 先呼叫thread類的靜態方法獲得當前執行緒的thread物件,每個執行緒對應的thread物件都有乙個t...

20191116 ThreadLocal原始碼解析

threadlocal是用來儲存執行緒的本地資料的。threadlocal的設計算是十分巧妙的。每乙個執行緒thread持有threadlocalmap,threadlocalmap是threadlocal下的乙個內部靜態類。threadlocalmap並沒有繼承map,而是持有了乙個entry的t...

AbstractCollection原始碼分析

abstractcollection抽象類提供了collection的骨架實現,collection分析請看 這裡直接看它的 是如何實現的.public abstract iterator iterator 該方法沒有實現.public abstract int size 該方法沒有實現.publi...