在看Netty的DefaultChannelPromoise的setSucess方法跟踪代码时,跟踪到了DefaultPromise的 notifyListeners()方法
获取当前线程的静态方法,根据当前的线程是否属于Netty的FastThreadLocalThread 来判断,一个是 fast 的,一个 是 slow 的
fast和slow的实现逻辑如下,获取当前线程的 InternalThreadLocalMap,如果没有,就创建一个
调用的父类 UnpaddedInternalThreadLocalMap 的构造方法,并传入了一个数组,而这个数组默认大小是 32,里面填充32 个空对象的引用。
slowGet的方法如下,在如果jdk获取null,还是用了Netty提供的方式。
Netty在此还是尽量避免使用jdk提供的 threadLocalMap,因为在处理速度上Netty的效率是优于jdk的jdk的,因为jdk的探测查询方式和索引计算方式导致效率低。另外threadLocalMap中的key为弱引用,在下一次GC时会被回收掉,但是value是强引用,是不会回收掉的,这里有发生内存泄漏的可能,参考
https://www.cnblogs.com/wuhaonan/p/11427119.html