Netty的深入浅出--57.Netty常量池实现及ChannelOption与Attribute作用分析

 

 

接下来主要讲解ChannelOptions和AttributeKey对象以及他们之间的关系

 

简单来说channeloption是配置channelconfig的,而且还是以一种安全模式的情况下。

 

我们可以看到它的变量赋值,主要就是配置一些TCP/IP的一些属性配置 

它继承的父类是AbstractConstant

 

而它又是constant的一个实现

 

constant是一个单例,通过ConstantPool来管理和创建

 

constants一个map 集合用来管理constant,返回的就是一个ConcurrentMap

 

获取一个为name的常量,如果没就创建该常量

 

constant进行了两次的判断。 

主要原因是因为putIfAbsent()方法

 

 因为如果两个线程一先一后进入到该第一个if判断,然后都new了一个tempConstant之后,第一个进入的执行完毕,第二个才到

putIfAbsent()判断,发现不能put了,里面存在了该变量,这个时候constant是null,所以需要通过第二个if语句来返回tempConstant。

总结ChannelOption:本身只负责维护一些常量的名字,而维护常量的值是在ConstantPool中创建和维护的

 

 前面说到ChannelOption目的是为了配置ChannelConfig;

而channelConfig对channel进行配置

 

 

查看setOption()方法,可以看到它本身并不维护任何值,它维护的是值的类型。所以说channelOption是为了channelConfig服务的。channelConfig才是真正对channel进行配置

 

现在我们分析一下attributeKey

 

发现attributeKey继承abstractConstant,继承体系和ChannelOption是一样的。

 

 和AttributeKey相关的一个组件Attribute

 

总结:AttributeKey里面含有Attribute,attributeMap通过从AttributeKey中的key获取相关的Attribute

 

 

attribut的作用:就是可以实现多个handler共享数据,当前面一个handler处理完之后,可以将需要共享给下一个handler的数据保存到attributeMap中发送给下一个handler,下个handler可以通过key值来获取相应的Attribut。

猜你喜欢

转载自blog.csdn.net/qq_37909508/article/details/91489514