ThreadLocalMap的一点问题,烦请老师回答

来源:10-3 FastThreadLocal的创建和get()实现

慕粉3520842

2018-06-28

http://img.mukewang.com/szimg/5b34b0b900011fcf09550614.jpg

根据这幅图,slowThreadLocalMap就是一个ThreadLocal, 我看了下ThreadLocal的实现方式,存放的变量应该是存放在Thread的ThreadLocal.ThreadLocalMap这个属性中的,key是ThreadLocal,这样看来,获取的时候还是相当于线程里面取,和右边应该没啥区别啊 ,为啥说两者效率相差很大。

写回答

3回答

慕哥8298992

2018-12-18

效率不一样的原因是:  ThreadLocal 是hash 里面有链表,  FastThreadLocal 是数组, 获取的时间复杂度一个是 O(n), 一个 O(1)

2
0

鋒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

0
0

闪电侠

2018-06-28

如果是FastThreadLocalThread的话,那么可以直接获取threadLocalMap(InternalThreadLocalMap
),而如果是Thread的话,首先要获取ThreadLocal.ThreadLocalMap,然后再从这个map里面获取当前线程对应的threadLocalMap(InternalThreadLocalMap
)哈,因为我们最终我们要获取的是Netty的threadLocalMap,类型为InternalThreadLocalMap哦!

0
0

Java读源码之Netty深入剖析

解析netty各大组件细节,百万级性能调优,设计模式实际运用

2334 学习 · 283 问题

查看课程