ThreadLocal是一个线程内部的数据存储类,数据存储以后,只能在指定线程中获取到存储的数据,其它线程无法获取到。比如Looper的存储,因为Looper的作用域就是当前线程,每个线程的Looper都不一样,所以用ThreadLocal非常合适。
比如在主线程中定义一个ThreadLocal:private ThreadLocal mBooleanThreadLocal = new ThreadLocal();
然后在不同的子线程中给它赋值,在不同的子线程中取出来的值是在当前子线程中给它赋的值,而并不会覆盖。也就是说每个子线程取出来的值都不一样(如果赋的值不一样的话)。
之所以这么奇妙,是因为不同线程访问同一个ThreadLocal的get方法,ThreadLocal内部会从各自线程中取出一个数组,然后再从数组中根据当前ThradLocal的索引去查找对应的value值。