ThreadLocal.get()方法的源码
时间: 2024-06-21 11:00:32 浏览: 112
ThreadLocal的get()方法在实现上利用了ThreadLocalMap。当我们调用`ThreadLocal.get()`时,它会从当前线程的ThreadLocalMap中查找对应的ThreadLocal变量的值[^1]。如果该线程还没有为这个ThreadLocal实例设置过值,那么get方法会返回null。这是一个简单的示例:
```java
// 假设ThreadLocal变量tl已经被初始化
ThreadLocal tl = new ThreadLocal();
// 在当前线程中调用get方法
Object value = tl.get(); // 如果当前线程还没有为tl设置值,则value为null
// 如果线程设置了值
tl.set("some value");
value = tl.get(); // 此时value将为"some value"
```
相关问题
ThreadLocal的get返回什么
ThreadLocal的get()方法返回当前线程中与ThreadLocal对象关联的值。具体来说,它会从当前线程的ThreadLocalMap中获取与ThreadLocal对象相对应的Entry,并返回Entry中存储的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [深入学习java源码之ThreadLocal.get()()与ThreadLocal.initialValue()](https://blog.csdn.net/qq_35029061/article/details/86495625)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
threadlocal源码
ThreadLocal源码是Java中一个关键的类,它提供了一种在多线程环境下实现线程本地变量的机制。在JDK 8之前和之后,ThreadLocal的内部结构有所变化。ThreadLocal的源码分为两部分:ThreadLocal类和ThreadLocalMap类。
ThreadLocal类是一个泛型类,它包含了两个核心方法:set()和get()。set()方法用于将一个值与当前线程关联起来,get()方法用于获取当前线程关联的值。
ThreadLocalMap类是ThreadLocal的内部类,它用于存储每个线程的本地变量。在JDK 8之前,ThreadLocalMap是通过线性探测法解决哈希冲突的,每个ThreadLocal对象都对应一个Entry对象,Entry对象包含了ThreadLocal对象和与之关联的值[2]。
在JDK 8之后,ThreadLocalMap的实现方式发生了改变。使用了类似于HashMap的方式,采用了分段锁的机制来提高并发性能。每个线程维护一个ThreadLocalMap对象,其中的Entry对象也是采用链表的形式来解决哈希冲突。
总结起来,ThreadLocal源码主要由ThreadLocal类和ThreadLocalMap类组成。ThreadLocal类提供了set()和get()方法来管理线程本地变量,而ThreadLocalMap类则负责存储每个线程的本地变量,并解决哈希冲突的问题。
史上最全ThreadLocal 详解 ThreadLocal源码分析_02 内核(ThreadLocalMap) 【JDK源码】线程系列之ThreadLocal 深挖ThreadLocal ThreadLocal原理及内存泄露预防 ThreadLocal原理详解——终于弄明白了ThreadLocal ThreadLocal使用与原理 史上最全ThreadLocal 详解。
ThreadLocal源码分析,主要有ThreadLocal源码以及ThreadLocal的内部结构在jdk8前后的变化。
使用方式非常简单,核心就两个方法set/get public class TestThreadLocal { private static final ThreadLocal<String> threadLocal = new ThreadLocal<>(); public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { try { threadLocal.set("aaa"); Thread.sleep(500); System.out.println("threadA:" threadLocal.get()); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); new Thread(new Runnable() { @Override public void run() { threadLocal.set("bbb"); System.out.println("threadB:" threadLocal.get()); } }).start(); } }
阅读全文
相关推荐















