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


