1. Thread中存储的是ThreadLocalMap类型
2. ThreadLocal是以WeakPrefernce的形式存储在ThreaLocalMap中的
static class Entry extends WeakReference<ThreadLocal<?>> {
/** The value associated with this ThreadLocal. */
Object value;
Entry(ThreadLocal<?> k, Object v) {
super(k);
value = v;
}
}
3. ThreadLocal的get方法
- getMap(this) -> (经过Map的一些算法)获取Entry->取得Entry的value
- 如果取不到数据,会调用initialValue,其他类型通过override这个函数来初始化,比如
private static final ThreadLocal<Choreographer> sSfThreadInstance =
new ThreadLocal<Choreographer>() {
@Override
protected Choreographer initialValue() {
Looper looper = Looper.myLooper();
if (looper == null) {
throw new IllegalStateException("The current thread must have a looper!");
}
return new Choreographer(looper, VSYNC_SOURCE_SURFACE_FLINGER);
}
};