ThreadLocal的底层原理
时间: 2023-08-27 18:21:54 浏览: 118
ThreadLocal详解
4星 · 用户满意度95%
ThreadLocal是Java中一个线程局部变量,其底层原理可以简单概括为:每个Thread对象内部都有一个ThreadLocalMap对象,该ThreadLocalMap对象用于存储ThreadLocal对象与其对应的值,其中ThreadLocal对象作为key,值作为value。
当通过ThreadLocal的get()方法获取值时,首先获取当前线程的ThreadLocalMap对象,然后通过ThreadLocal对象作为key获取对应的值,如果不存在则通过ThreadLocal的initialValue()方法初始化一个值并存储到ThreadLocalMap中。当通过ThreadLocal的set()方法设置值时,同样是先获取ThreadLocalMap对象,然后将ThreadLocal对象作为key,值作为value存储到ThreadLocalMap中。
需要注意的是,由于ThreadLocalMap对象是存储在每个Thread对象内部的,因此每个线程只能访问自己内部的ThreadLocalMap对象,从而实现了线程局部变量的效果。同时,由于ThreadLocalMap中的key是弱引用类型,因此当ThreadLocal对象被垃圾回收后,对应的value也会被自动清除,避免了内存泄漏问题。
阅读全文