目錄
- Constant
- ChannelConfig
- Netty中重要的Constant實(shí)現(xiàn)類:ChannelOption和AttributeKey
- ChannelOption
- AttributeKey
- 源碼學(xué)習(xí)
- 小結(jié)
Constant
- Constant 和 ConstantPool 是用于表示常量的一種機(jī)制。
- Constant 接口定義了常量的基本屬性和方法,包括唯一標(biāo)識(shí) ID、名稱。
- 但是一般通過(guò)ConstantPool進(jìn)行管理。
AttributeKey
- 注意這是Key,它是映射到Attribute的。
源碼學(xué)習(xí)
- ConstantPool中的valueOf方法
- 第一次檢測(cè)是為了避免重復(fù)創(chuàng)建,如果該常量已經(jīng)存在,則直接返回該常量;第二次檢測(cè)是為了保證多線程下的線程安全,只有當(dāng)該常量不存在時(shí)才創(chuàng)建新的常量,如果另一個(gè)線程已經(jīng)創(chuàng)建了該常量,則直接返回已創(chuàng)建的常量。
- 如果不使用雙重檢測(cè),可能會(huì)出現(xiàn)多個(gè)線程同時(shí)創(chuàng)建相同名稱的常量,導(dǎo)致產(chǎn)生多個(gè)相同的常量實(shí)例。因此,使用雙重檢測(cè)可以避免重復(fù)創(chuàng)建常量,并保證在多線程環(huán)境下的線程安全。
小結(jié)
-
Constant
類是 Netty 框架提供的用于實(shí)現(xiàn)常量池的類,通常用于框架內(nèi)部的常量定義,而不是用于業(yè)務(wù)代碼的常量定義。 -
AttributeKey
和ChannelOption
都是 Netty 中用于為Channel
和ChannelConfig
存儲(chǔ)屬性的機(jī)制,它們的主要區(qū)別在于作用的范圍和使用場(chǎng)景。 -
ChannelOption
是一種可選配置項(xiàng),它定義了ChannelConfig
可以使用的參數(shù)。ChannelOption
可以用于配置網(wǎng)絡(luò)協(xié)議的底層參數(shù),例如 SO_LINGER 或 TCP_NODELAY 等。- 通常情況下,
ChannelOption
用于設(shè)置連接參數(shù),例如連接超時(shí)時(shí)間、Nagle 算法等。 -
ChannelOption
是針對(duì)ChannelConfig
的,使用channel.config().setOption(option, value)
方法來(lái)設(shè)置。 -
ChannelOption
適用于需要傳遞給 Netty 底層的配置參數(shù)。
- 通常情況下,
-
AttributeKey
則是用于在Channel
上存儲(chǔ)一些屬性,這些屬性通常是業(yè)務(wù)邏輯相關(guān)的,例如登錄用戶、登錄狀態(tài)等。AttributeKey
對(duì)象是一個(gè)標(biāo)識(shí)符,可以在Channel
上存儲(chǔ)和訪問(wèn)一個(gè)屬性值。- 與
ChannelOption
不同,AttributeKey
存儲(chǔ)的屬性是不透明的,Netty 不知道這些屬性的含義,因?yàn)槭亲远x的。 -
AttributeKey
適用于需要在業(yè)務(wù)邏輯中存儲(chǔ)和訪問(wèn)數(shù)據(jù)的場(chǎng)景,例如在一個(gè)ChannelHandler
中存儲(chǔ)和讀取登錄用戶信息。
- 與
-
Attribute
用于在Channel
中存儲(chǔ)一些自定義的數(shù)據(jù) ,這些數(shù)據(jù)可以被Channel
中的各個(gè)處理器共享和訪問(wèn)。
以上就是一文詳解Java Netty中的Constant類的詳細(xì)內(nèi)容,更多關(guān)于Netty Constant類的資料請(qǐng)關(guān)注其它相關(guān)文章!
原文地址:https://juejin.cn/post/7229984415329878072