ThreadLocal原理分析

1)什么是线程安全?
    多个线程调用这个方法,对数据修改时,多个线程看到的数据是一致的。

2)做线程隔离
    提供了一个线程范围的局部变量,使得某个共享资源的变量是独立的。

3)使用
    (1)synchronized可以去加锁
    (2)ThreadLocal<Integer> num = new ThreadLocal<>(){
            protected
        }

        每个线程去拿到的值,都是线程级别隔离的,都是拿到的一个值得副本。

4)2个问题
    (1)每个线程的变量副本是如何存储的?
        以当前线程为key,去获得。 获得的一个Thread的一个成员属性ThreadLocalMap,里面全是key,value:
            this--》initialValue()

            entry[15]   -->  

    (2)ThreadLocal是什么时候设置初始化的:
        我们去重写initialValue,调用子类的重写的方法。

    (3)在同一个线程里面有多个ThreadLocal,那么如何存储?


5)如何看源码?
    在基本使用后,哪里使用,就作为入口去

6)weakReference
    强引用
    弱引用
    软引用
    虚引用


    和GC回收有关系

7)是否会跨线程共享的问题
        多个线程修改同一个实例,initialValue返回的是同一个值。那么修改的还是同一个数据,无法保证原子性。

©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页