For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
【ThreadLocal原理与同步机制的区别】
与同步机制区分开来,同步机制是为了解决在共享情况下并发导致的问题。而ThreadLocal是避免了共享。在多线程情况下,为了避免共享,我们可以采用多线程多实例的方式,也可以使用ThreadLocal来避免共享冲突。
【ThreadLocal是什么?】
ThreadLocal提供了线程本地变量,它可以保证访问到的变量属于当前线程,每个线程都保存有一个变量副本,每个线程的变量都不同。ThreadLocal相当于提供了一种线程隔离,将变量与线程相绑定。
输出: 线程一:11 main线程:1 没有发生值的覆盖,两个线程保存的值是不同的
证明ThreadLocal确实为变量在每个线程中都创建了一个副本
【Thread成员】
ThreadLocal.ThreadLocalMap threadLocals = null;
Thread有一个ThreadLocalMap成员
ThreadLocal的set方法
将当前的ThreadLocal对象和value作为参数
通过ThreadLocalMap的构造方法可以看到,该方法创建一个Entry数组,然后通过传入的key(当前ThreadLocal对象)计算在数组中的下标,然后将Entry放入数组。
Thread的ThreadLocalMap存放的Entry,键是不同的ThreadLoacal对象,也就是说一个线程绑定多个ThreadLocal对象
那么也就是说,ThreadLocal设置值的时候,这个值是存放在当前线程的一个map(这个map存放了多个ThreadLocal对象)里面,因此,不同线程之间即避免了共享。
【小结】
同一个ThreadLocal对象,不同的线程,不同的ThreadLocal对象的值
希望以上的文章是关于学java的一种体验和思考,是给很多人反思,也许给你一秒钟、半秒钟,哪怕说一句话有点道理,引发自己内心的感触,这就是最大的价值。
免责声明:本文由昆明达内小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除。
0元课程试听报名开始啦!