ThreadLocal底层Entry的set方法, 里面for循环的k == null什么时候为true
时间: 2024-05-20 07:16:07 浏览: 89
只需要用一张图片素材文档选择器.zip
在ThreadLocal底层Entry的set方法中,for循环的k == null会在两种情况下为true:
1. 当当前线程第一次调用ThreadLocal的get或set方法时,ThreadLocal的initialValue方法会被调用,返回一个初始值。此时,ThreadLocal的map为空,for循环不会执行,直接执行k = tl;语句,将当前ThreadLocal对象作为key,初始值作为value存放到map中。
2. 当当前线程已经在ThreadLocal的map中存储了对应的值,但是在进行set操作时,ThreadLocal的map已经被其它线程修改过了,当前线程需要重新将自己的值存储到map中。此时,for循环会遍历整个Entry数组,直到找到一个k为null的位置,将当前ThreadLocal对象和对应的值存放到该位置中。
阅读全文