ThreadLocalMap的一点问题,烦请老师回答
来源:10-3 FastThreadLocal的创建和get()实现

慕粉3520842
2018-06-28
根据这幅图,slowThreadLocalMap就是一个ThreadLocal, 我看了下ThreadLocal的实现方式,存放的变量应该是存放在Thread的ThreadLocal.ThreadLocalMap这个属性中的,key是ThreadLocal,这样看来,获取的时候还是相当于线程里面取,和右边应该没啥区别啊 ,为啥说两者效率相差很大。
3回答
-
慕哥8298992
2018-12-18
效率不一样的原因是: ThreadLocal 是hash 里面有链表, FastThreadLocal 是数组, 获取的时间复杂度一个是 O(n), 一个 O(1)
20 -
鋒Nic
2018-07-17
private static InternalThreadLocalMap slowGet() {
ThreadLocal<InternalThreadLocalMap> slowThreadLocalMap = UnpaddedInternalThreadLocalMap.slowThreadLocalMap;
InternalThreadLocalMap ret = slowThreadLocalMap.get();
if (ret == null) {
ret = new InternalThreadLocalMap();
slowThreadLocalMap.set(ret);
}
return ret;
}视频里有提到slowThreadLocalMap.get()这段代码会慢点,而fastGet方法直接取的是FastThreadLocalThread维护的ThreadLocalMap
00 -
闪电侠
2018-06-28
如果是FastThreadLocalThread的话,那么可以直接获取threadLocalMap(InternalThreadLocalMap
),而如果是Thread的话,首先要获取ThreadLocal.ThreadLocalMap,然后再从这个map里面获取当前线程对应的threadLocalMap(InternalThreadLocalMap
)哈,因为我们最终我们要获取的是Netty的threadLocalMap,类型为InternalThreadLocalMap哦!00
相似问题