1. 程式人生 > >ThreadLocal源碼解析

ThreadLocal源碼解析

由於 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源碼解析