Java多线程与并发之ThreadLocal( 四 )

thread_1 1

thread_0 1

thread_3 1

thread_4 1

thread_2 1

可以看到每个线程的获取的初始值都是0 , 并且对num++的操作也互不影响

3.ThreadLocal如何实现的

3.1 ThreadLocal的数据结构

ThreadLocal内部维护的是一个类似Map的ThreadLocalMap数据结构 , 而每个Thread类 , 都有一个ThreadLocalMap成员变量 。 ThreadLocalMap将线程本地变量(ThreadLocal)作为key , 线程变量的副本作为value , 如图所示:

需要注意的是ThreadLocal中的Entry的key和value的关系有系统进行维护 , 若维护不当则可能导致多线程状态下的不安全(一般不会 , 至少需要注意) 。

推荐阅读