Skip to content
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

Open
MoJieBlog opened this issue Jun 25, 2019 · 7 comments
Open

2019-06-25:谈谈ThreadLocal用法和原理? #83

MoJieBlog opened this issue Jun 25, 2019 · 7 comments
Labels

Comments

@MoJieBlog
Copy link
Collaborator

No description provided.

@gabyallen
Copy link

ThreadLocal用于保存某个线程共享变量:对于同一个static ThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量。

1、ThreadLocal.get: 获取ThreadLocal中当前线程共享变量的值。

2、ThreadLocal.set: 设置ThreadLocal中当前线程共享变量的值。

3、ThreadLocal.remove: 移除ThreadLocal中当前线程共享变量的值。

4、ThreadLocal.initialValue: ThreadLocal没有被当前线程赋值时或当前线程刚调用remove方法后调用get方法,返回此方法值。

@yangfanggang
Copy link

楼上说的挺好
我们注意一点就行了
1.ThreadLocal不是线程

@LvKang-insist
Copy link

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

@Moosphan Moosphan added the 线程 label Jul 1, 2019
@Moosphan Moosphan changed the title 2019-06-25:谈谈ThreadLocal用法和原理? 2019-06-25:谈谈ThreadLocal用法和原理? Jul 1, 2019
@18361237136
Copy link

ThreadLocal用来保存数据,每个线程之间不影响。
用get ,set,和remove来操作里面的数据
它在保存数据的时候首页获取到当前线程,然后将数据保存在当前线程的ThreadMap中,以当前的对象为键,数据为值得格式保存。

@kavmors
Copy link

kavmors commented Mar 2, 2020

ThreadLocal面试点:

  1. 结构(以ThreadLocal.get分析,从当前线程Thread对象取得ThreadLocalMap,ThreadLocalMap根据ThreadLocal对象取出Value)
  2. ThreadLocalMap的哈希存储结构(开放寻址法)
  3. ThreadLocalMap对ThreadLocal弱引用的原因
  4. 什么情况会引起内存泄漏?
  5. 脏数据回收

参考资料:https://www.jianshu.com/p/dde92ec37bd1

@Jmengfei
Copy link

Jmengfei commented Mar 29, 2021

ThreadLocal 主要用来Thread的数据存储,且每个Thread互不影响。底层是通过map来进行存储的。ThreadLocal 在保存数据时 会获取当前操作的线程,然后将数据保存在当前线程的 ThreadLocalMap 中,以当前的对象为键,数据为值,进行保存。get方法同理。

@CKTim
Copy link

CKTim commented Feb 14, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

9 participants