目录
- Constant
- ChannelConfig
- Netty中重要的Constant实现类:ChannelOption和AttributeKey
- ChannelOption
- AttributeKey
- 源码学习
- 小结
Constant
- Constant 和 ConstantPool 是用于表示常量的一种机制。
- Constant 接口定义了常量的基本属性和方法,包括唯一标识 ID、名称。
- 但是一般通过ConstantPool进行管理。
AttributeKey
- 注意这是Key,它是映射到Attribute的。
源码学习
- ConstantPool中的valueOf方法
- 第一次检测是为了避免重复创建,如果该常量已经存在,则直接返回该常量;第二次检测是为了保证多线程下的线程安全,只有当该常量不存在时才创建新的常量,如果另一个线程已经创建了该常量,则直接返回已创建的常量。
- 如果不使用双重检测,可能会出现多个线程同时创建相同名称的常量,导致产生多个相同的常量实例。因此,使用双重检测可以避免重复创建常量,并保证在多线程环境下的线程安全。
小结
-
Constant
类是 Netty 框架提供的用于实现常量池的类,通常用于框架内部的常量定义,而不是用于业务代码的常量定义。 -
AttributeKey
和ChannelOption
都是 Netty 中用于为Channel
和ChannelConfig
存储属性的机制,它们的主要区别在于作用的范围和使用场景。 -
ChannelOption
是一种可选配置项,它定义了ChannelConfig
可以使用的参数。ChannelOption
可以用于配置网络协议的底层参数,例如 SO_LINGER 或 TCP_NODELAY 等。- 通常情况下,
ChannelOption
用于设置连接参数,例如连接超时时间、Nagle 算法等。 -
ChannelOption
是针对ChannelConfig
的,使用channel.config().setOption(option, value)
方法来设置。 -
ChannelOption
适用于需要传递给 Netty 底层的配置参数。
- 通常情况下,
-
AttributeKey
则是用于在Channel
上存储一些属性,这些属性通常是业务逻辑相关的,例如登录用户、登录状态等。AttributeKey
对象是一个标识符,可以在Channel
上存储和访问一个属性值。- 与
ChannelOption
不同,AttributeKey
存储的属性是不透明的,Netty 不知道这些属性的含义,因为是自定义的。 -
AttributeKey
适用于需要在业务逻辑中存储和访问数据的场景,例如在一个ChannelHandler
中存储和读取登录用户信息。
- 与
-
Attribute
用于在Channel
中存储一些自定义的数据 ,这些数据可以被Channel
中的各个处理器共享和访问。
以上就是一文详解Java Netty中的Constant类的详细内容,更多关于Netty Constant类的资料请关注其它相关文章!
原文地址:https://juejin.cn/post/7229984415329878072