对 ThreadLocal 类的理解

1.通过 synchronize 关键字,各线程可以共享变量。而通过 ThreadLocal 各线程彼此分隔,维护只属于自己的变量。

2.ThreadLocal  本身不保存什么数据,它主要提供操作方法,从 ThreadLocalMap 中存取数据。

3.ThreadLocal 联系着 Thread 和 ThreadLocalMap,每个 Thread 保存一个 ThreadLocalMap 。

4.一个 Thread 或者一个类中,可以创建多个 ThreadLocal。一般把 ThreadLocal 变量定义为 static 类型,防止重复创建 key(ThreadLocal )。

5.ThreadLocal 的 get set 方法源码

 

6.Looper.class 中的 ThreadLocal  使用示例。

这里 sThreadLocal 为 static 类型,因此所有 looper 共享一个 ThreadLocal 实例。又因为每个线程对应一个 looper,所以实际上所有线程共享这个 ThreadLocal 实例,各线程中的 ThreadLocalMap 以 sThreadLocal 为 key,保存着各线程自己的 looper。

这里 的 prepare() 和 prepareMainLooper() 方法中,sThreadLocal.get() != null,确定了 Thread 和 Looper 的一一对应关系:Looper 是以 sThreadLocal 为 key,保存在 每个 Thread 的 ThreadLocalMap 中

7.ThreadLocal 的set方法源码

此方法确定了 Thread 和 ThreadLocalMap 的一对一关系。

8.ThreadLocal  使用示例

class Example{

    static ThreadLocal<Example> sThreadLocal = new ThreadLocal<Example>();

    public void saveExample(){
        sThreadLocal.set(this);
    }

    public Example getExample(){
        return sThreadLocal.get();
    }

}

9. Thread 和 ThreadLocalMap 是一对一的关系,见 ThreadLocal 的 set 方法(第7点);

Thread 和 Looper 也是 一对一关系,见 Looper 的 prepare 方法(第6点)

Thread 和 ThreadLocal 可以是 一对多的关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值