ThreadLocal原理
时间: 2023-10-28 21:51:36 浏览: 77
ThreadLocal是Java中一个线程级别的变量,它可以在一个线程中保存一个变量的副本,而且这个变量只能被这个线程使用和修改。ThreadLocal的实现原理如下:
1. 每个ThreadLocal对象都有一个唯一的ID值,每个线程都有一个ThreadLocalMap对象,ThreadLocalMap的key是ThreadLocal对象的ID,value是对应的变量值。
2. 当某个线程通过ThreadLocal.get()方法获取ThreadLocal对象的值时,ThreadLocal会先获取当前线程的ThreadLocalMap对象,并通过ThreadLocal对象的ID获取对应的变量值。
3. 如果当前线程的ThreadLocalMap对象为null,则会创建一个新的ThreadLocalMap对象,并将ThreadLocal对象的ID和变量值存储到该对象中。
4. 如果当前线程的ThreadLocalMap对象不为null,则直接将ThreadLocal对象的ID和变量值存储到该对象中。
5. 当某个线程通过ThreadLocal.set()方法修改ThreadLocal对象的值时,ThreadLocal会先获取当前线程的ThreadLocalMap对象,并通过ThreadLocal对象的ID获取对应的变量值。
6. 如果当前线程的ThreadLocalMap对象为null,则会创建一个新的ThreadLocalMap对象,并将ThreadLocal对象的ID和修改后的变量值存储到该对象中。
7. 如果当前线程的ThreadLocalMap对象不为null,则直接将ThreadLocal对象的ID和修改后的变量值存储到该对象中。
8. 当某个线程执行完毕后,ThreadLocalMap对象会被回收,ThreadLocal对象也会被回收,以防止内存泄漏。
阅读全文
相关推荐
![](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)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)