ThreadLocal源碼解析
阿新 • • 發佈:2018-05-19
由於 set方法 IT 提高 線程 弱引用 XP oca ati
JDK源碼如是說:
ThreadLocal類用來提供線程內部的局部變量。這種變量在多線程環境下訪問(通過get或set方法訪問)時 能保證各個線程裏的變量相對獨立於其他線程內的變量。ThreadLocal實例通常來說都是private static類型的, 用於關聯線程和線程的上下文。1、內部存儲元素采用ThreadLocalMap,其內部
1.1、Entry繼承WeakReference<ThreadLocal<?>>,
方便垃圾回收key。每次get()——>getEntry()——>getEntryAfterMiss——>expungeStaleEntry刪除key為null的值。
1.2、使用ThreadLocal作為key,減少Entry的key數量,提高性能。
2、使用時,繼承
protected T initialValue() {
return null;
}
添加需要返回的對象。
建議將ThreadLocal變量定義成private static的,這樣的話ThreadLocal的生命周期就更長,由於一直存在ThreadLocal的強引用,所以ThreadLocal也就不會被回收,也就能保證任何時候都能根據ThreadLocal的弱引用訪問到Entry的value值,然後remove它,防止內存泄露。
ps:ThreadLocal中對象只是當前線程存儲在map中的副本。
ThreadLocal源碼解析