Netty之DefaultAttributeMap与AttributeKey的机制和原理
一、介绍和原理分析
1.什么是 DefaultAttributeMap?
DefaultAttributeMap
是一个 数组 + 链表
结构的线程安全Map
。
2.什么是 AttributeKey?
AttributeKey
可以想象成一个缓存set
,存放了一组key
的集合,与DefaultAttributeMap
之间的关系是,后者中的哈希图
存放键值对(k-v
)的v
即是AttributeKey
。
有了AttributeKey
,你自然会想到Attribute
,两者之间又有什么关系呢?下面会讲,慢慢理解,跟着我思路!
3. 什么是 Attribute?
Attribute
顾名思义,就是与AttributeKey
是一对的,形象一点说就是你跟你的对象(老婆),而你就是key
,是一对一的,不能是一对多的关系
凭什么是一对一,也就是凭什么你只能有一个对象?
AttributeKey
它受DefaultAttributeMap
中的内部类DefaultAttribute
约束,前面说了DefaultAttributeMap
的结构是以数组和链表的形式,其实它的最小单元(结点)就是DefaultAttribute
。
4. 关于数组和链表的结构
- 数组采用的是
AtomicReferenceArray
, 链表 中 节点为DefaultAttribute
结构; DefaultAttribute
继承了AtomicReference
,所以也是具有与AtomicReference
相同的原子操作;- 数组和链表都是线程安全的;
5. DefaultAttributeMap 与 AtomicReferenceArray 的关系图
其中,每个结点DefaultAttribute
的字段就没有详细画出来
graph LR
subgraph DefaultAttributeMap
subgraph “AtomicReferenceArray(数组)”
end
end