java中ThreadLocal 的理解和底层结构
时间: 2023-11-05 14:57:54 浏览: 62
ThreadLocal是Java中的一个线程局部变量,它能够为每个线程提供独立的变量副本,各个线程之间互不干扰。底层结构是通过Thread类内部维护了一个ThreadLocalMap来实现的。每个Thread对象都有一个threadLocals属性和一个inheritableThreadLocals属性,其中threadLocals是当前线程私有的ThreadLocalMap,而inheritableThreadLocals是可继承的ThreadLocalMap。ThreadLocalMap的底层数据结构是一个数组,存储了多个ThreadLocal对象及其对应的值。每个ThreadLocal对象通过哈希算法计算出一个索引位置,然后将该索引位置作为数组下标存储对应的值。这样,就实现了每个线程独立拥有自己的ThreadLocal变量。
相关问题
java中ThreadLocal
ThreadLocal是Java中的一个类,用于在多线程环境下实现线程本地变量。它提供了一种线程级别的数据隔离机制,使得每个线程都可以拥有自己独立的变量副本,互不干扰。每个线程都可以通过ThreadLocal对象来访问自己的变量副本,而不会影响其他线程的副本。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Java中的ThreadLocal详解](https://blog.csdn.net/licux/article/details/117292777)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [Java中ThreadLocal详解(一篇就够了)](https://blog.csdn.net/qq_38721537/article/details/124565091)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [Java中ThreadLocal详解](https://blog.csdn.net/qq_53729147/article/details/127967751)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
threadlocal底层结构
ThreadLocal是Java中的一个线程本地变量,它提供了一种访问某个变量的方法,这个变量与其它线程的变量隔离开来。ThreadLocal的底层结构是一个ThreadLocalMap,每个Thread都有一个ThreadLocalMap变量,ThreadLocalMap内部定义了Entry节点类,这个节点继承了WeakReference类泛型为ThreadLocal类,节点类的构造方法ThreadLocal<?> k, Object v,所以可以得到下面的结构关系图:
```
ThreadLocalMap
Entry extends WeakReference<ThreadLocal<?>>
ThreadLocal<?> key
Object value
Entry extends WeakReference<ThreadLocal<?>>
ThreadLocal<?> key
Object value
...
```
可以看到,ThreadLocalMap是一个以ThreadLocal对象为键,以线程本地变量为值的映射表。每个线程都有一个ThreadLocalMap对象,用于存储该线程的所有ThreadLocal变量。当一个线程结束时,它持有的所有ThreadLocal变量都会被回收,从而避免了内存泄漏的问题。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)