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。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值