Java中的Threadlocal源代码学习
ThreadLocal是什么
回过头,想想ThreadLocal实现了什么样的功能。举个例子,当不同的线程都去执行同样一个语句以获得当前线程的Looper时,要怎么实现?或许吧,ThreadLocal就实现了这样一个功能。
在Looper中,申明了一个如下的静态变量,说明只有一个。
1 | static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>(); |
然后在Looper中调用myLooper()时,都执行了
1 | public static Looper myLooper() { |
顺手打开,看到了这个。
1 | public T get() { |
在每个Thread中,有个ThreadLocal.ThreadLocalMap。获取到当前线程的map之后,又将sThreadLocal自身作为一个Key,去获取到相应的结果。再看set()
1 | public void set(T value) { |
相同的套路,同样是先获取到当前线程的map,然后用ThreadLocal自身作为Key,存进去。
小结
因此对于ThreadLocal,可以这样理解:它自身就是一个Key,然后可以以这个Key在不同的线程中存储/获取一个值,值得类型就是声明时,尖括号里面的类型。
Java中的Threadlocal源代码学习