-
Notifications
You must be signed in to change notification settings - Fork 779
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-06-25:谈谈ThreadLocal用法和原理? #83
Comments
ThreadLocal用于保存某个线程共享变量:对于同一个static ThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量。 1、ThreadLocal.get: 获取ThreadLocal中当前线程共享变量的值。 2、ThreadLocal.set: 设置ThreadLocal中当前线程共享变量的值。 3、ThreadLocal.remove: 移除ThreadLocal中当前线程共享变量的值。 4、ThreadLocal.initialValue: ThreadLocal没有被当前线程赋值时或当前线程刚调用remove方法后调用get方法,返回此方法值。 |
楼上说的挺好 |
ThreadLocal 用来保存数据,且每个线程之间互不影响,比如 在主线程保存了一个 对象,但是在子线程中 就无法找到这个对象。 ThreadLocal 是一个线程内部的数据存储类,通过他可以指定线程中存储的数据,在读取时,只有指定的线程才可以读取到数据,其他线程无法拿到数据。 ThreadLocal 在保存数据时 会获取当前操作的线程,然后将数据保存在当前线程的 ThreadLocalMap 中,以当前的对象为键,数据为值,进行保存。 ThreadLoca 在获取数据时,和保存非常相似,都是拿到当前的线程对象,然后去判断 线程对象的 ThreadLocalMap 是否为空,如果为空,则 没有数据,否则 则获取数据。 从ThreadLocal的set 和 get 方法可以看出,他们操作的都是根据当前线程中的ThreadLocal.ThreadLocalMap threadLocals = null 来判断当前线程有没有保存数据,如果保存了,就会在当前线程中产生一个ThreadLocalMap 的对象 。数据就会保存在这个对象 里面,如果 没有保存过数据,那么当前线程中的ThreadLocalMap 就会为空。他们对ThreadLocal 所做的读/写操作仅限于线程的内部。因此在不同线程中访问同一个ThreadLocal的 set 和 get 方法 所得到的值 也是不一样的。 源码分析:https://blog.csdn.net/baidu_40389775/article/details/86759882 |
ThreadLocal用来保存数据,每个线程之间不影响。 |
ThreadLocal面试点:
|
ThreadLocal 主要用来Thread的数据存储,且每个Thread互不影响。底层是通过map来进行存储的。ThreadLocal 在保存数据时 会获取当前操作的线程,然后将数据保存在当前线程的 ThreadLocalMap 中,以当前的对象为键,数据为值,进行保存。get方法同理。 |
No description provided.
The text was updated successfully, but these errors were encountered: