ThreadLocal总结一下

看了一些博客,对ThreadLocal有了一个初步的认识。

首先要明白ThreadLocal并不是一个Thread,而是Thread的局部变量,一般称为线程本地变量。将对象的作用范围限制在一个线程上下文中,使得变量的作用域为线程级。

1、每个thread维护着一个threadlocalmap的引用

2、ThreadLocalMap是ThreadLocal内部类。ThreadLocalMap中的key为ThreadLocal对象,value为要存储的对象

3、调用threadlocal的set方法时,实际上是往threadlocalmap设置值,key是ThreadLocal对象,值是传递进来的对象

4、调用ThreadLocal的get()方法时,实际上就是往ThreadLocalMap获取值,key是ThreadLocal对象

5、ThreadLocal本身并不存储值,它只是作为一个key来让线程从ThreadLocalMap获取value

概括起来说,对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,比如定义一个static变量,同步访问,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。

ThreadLocal的对象关系引用图:

 

posted @ 2018-09-05 18:43  朝朝暮暮dx  阅读(125)  评论(0编辑  收藏  举报