在之前的Netty的FastThreadLocal文章中介绍了FastThreadLocal在Netty中的实现和使用.
在JDK的ThreadLocal的实现上,它生成一个threadLocalHashCode值,根据这个Code值从ThreadLocalMap中存取值,底层使用的是哈希表.
而FastThreadLocal会生成一个索引下标index,通过这个索引下标从InternalThreadLocalMap中存取值, 底层使用数组的方式实现存取.
一个使用哈希表,一个使用数组,性能会有较明显差异.
今天在浏览Dubbo源码的时候,发现了一个com.alibaba.dubbo.common.threadlocal.InternalThreadLocal类,细看下它的实现,代码与io.netty.util.concurrent.FastThreadLocal很相似.
看下Dubbo源码中对它的解释
This design is learning from io.netty.util.concurrent.FastThreadLocal which is in Netty.
原来Dubbo是学习了Netty的设计. Dubbo并没有使用JDK的ThreadLocal, 它也是使用和Netty一样的设计理念, 底层使用数组实现.
个人见解: 有时候学习源码, 比如学习Netty,可能职业生涯中都不会使用Netty实现一个高性能的框架. 学习源码是让我学习里面的一些思想和解决问题的思路,能够运用到日常的开发工作中.