public final class Looper {
static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();
private static void prepare(boolean quitAllowed) {
if (sThreadLocal.get() != null) {
throw new RuntimeException("Only one Looper may be created per thread");
}
sThreadLocal.set(new Looper(quitAllowed)); //创建Looper
}
public static @Nullable Looper myLooper() {
return sThreadLocal.get(); //获取Looper
}
}
2.ThreadLocal.set
public class ThreadLocal<T> {
public void set(T value) {
Thread t = Thread.currentThread(); //获得线程
ThreadLocalMap map = getMap(t); //获得线程的ThreadLocalMap
if (map != null){
map.set(this, value); //key是ThreadLocal本身
} else {
createMap(t, value);
}
}
ThreadLocalMap getMap(Thread t) {
return t.threadLocals; //ThreadLocalMap是Thread的一个变量
}
}
3.ThreadLocal.get
public class ThreadLocal<T> {
public T get() {
Thread t = Thread.currentThread();//获得当前线程
ThreadLocalMap map = getMap(t);//获得当前线程的ThreadLocalMap
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);//以ThreadLocal为key获得Entry
if (e != null) {
@SuppressWarnings("unchecked")
T result = (T)e.value; //获得value
return result;
}
}
return setInitialValue();//初始化
}
}