最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文詳解Java Netty中的Constant類

 更新時(shí)間:2023年05月07日 11:58:04   作者:KittyGuy  
這篇文章主要介紹了Constants類即常量類是將一些常用的變量集合到一個(gè)地方的類,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以參考一下

Constant

  • Constant 和 ConstantPool 是用于表示常量的一種機(jī)制。
  • Constant 接口定義了常量的基本屬性和方法,包括唯一標(biāo)識(shí) ID、名稱。

  • value就是Constant本身,確定范型的具體類型即可。

class Main {
   public static void main(String[] args) {
      MyConstant value = new MyConstant();
      System.out.println(value.PI);
      System.out.println(value.object);
  }
  static class MyConstant implements Constant<MyConstant> {
      public double PI = 3.1415926;
      public Object object = new Object();
      private final int id;
      private final String name;
      public MyConstant() {
          id = new Random().nextInt();
          name = id + "#";
      }
      @Override
      public int id() {
          return id;
      }
      @Override
      public String name() {
          return name;
      }
      @Override
      public int compareTo(MyConstant other) {
          return Integer.compare(id, other.id);
      }
   }
}
  • 但是一般通過ConstantPool進(jìn)行管理。

    • 注意范型T繼承自Constant。
  • 常量都是類的形式。

ChannelConfig

  • ChannelConfig是一個(gè)Channel的配置屬性集合。請(qǐng)將其向下轉(zhuǎn)換為更具體的配置類型,例如SocketChannelConfig,或使用setOptions(Map)來設(shè)置與傳輸相關(guān)的屬性:
Channel ch = ...; 
SocketChannelConfig cfg = (SocketChannelConfig) ch.getConfig(); 
cfg.setTcpNoDelay(false);

Option map是一個(gè)動(dòng)態(tài)的只寫屬性,允許在不向下轉(zhuǎn)換其關(guān)聯(lián)的ChannelConfig的情況下配置一個(gè)Channel。

  • 動(dòng)態(tài)的只寫屬性是指,屬性值可以在程序運(yùn)行時(shí)動(dòng)態(tài)地進(jìn)行修改,但只能進(jìn)行寫操作,不能進(jìn)行讀操作。在Option map中,只提供了設(shè)置屬性值的方法,沒有提供獲取屬性值的方法,因此稱之為只寫屬性。
  • 不需要轉(zhuǎn)型:
Channel ch = ...; 
Map<ChannelOption<?>, Object> options = new HashMap<>(); 
options.put(ChannelOption.SO_TIMEOUT, 5000); 
options.put(ChannelOption.SO_KEEPALIVE, true); 
ch.config().setOptions(options);
//不需要SocketChannelConfig cfg = (SocketChannelConfig) ch.getConfig();
//所有Channel都可以用
  • 更新選項(xiàng)映射,請(qǐng)調(diào)用setOptions(Map)。所有的ChannelConfig都有以下選項(xiàng):
名稱 關(guān)聯(lián)的設(shè)置方法 
ChannelOption.CONNECT_TIMEOUT_MILLIS setConnectTimeoutMillis(int)
ChannelOption.WRITE_SPIN_COUNT setWriteSpinCount(int) 
ChannelOption.WRITE_BUFFER_WATER_MARK setWriteBufferWaterMark(WriteBufferWaterMark)
ChannelOption.ALLOCATOR setAllocator(ByteBufAllocator) 
ChannelOption.AUTO_READ setAutoRead(boolean)
  • 在ChannelConfig的子類型中還有更多選項(xiàng)可用。例如,您可以根據(jù)SocketChannelConfig中所述的方式配置特定于TCP/IP套接字的參數(shù)。
  • 要注意這些配置是真實(shí)存在的,不能亂配,UPD顯然是沒有?;顧C(jī)制的,就不能用options.put(ChannelOption.SO_KEEPALIVE, true);

Netty中重要的Constant實(shí)現(xiàn)類:ChannelOption和AttributeKey

ChannelOption

  • 該類就是以類型安全的方式配置ChannelConfig。
    • 使用 ChannelOption 時(shí)可以通過編譯器進(jìn)行類型檢查,從而避免在運(yùn)行時(shí)出現(xiàn)類型錯(cuò)誤的情況。

  • 用例:
Bootstrap b = new Bootstrap(); 
b.group(group) 
 .channel(NioSocketChannel.class) 
 .remoteAddress(new InetSocketAddress("example.com", 80)) 
 // 使用 ChannelOption 配置連接超時(shí)時(shí)間 
 .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)

AttributeKey

  • 注意這是Key,它是映射到Attribute的。

  • 在Netty中,Attribute用于在Channel中存儲(chǔ)關(guān)聯(lián)的元數(shù)據(jù)??梢詫?code>Attribute看作是一個(gè)鍵值對(duì),其中鍵是一個(gè)AttributeKey類型的對(duì)象,而值是任意類型的Java對(duì)象。
    • Attribute在網(wǎng)絡(luò)應(yīng)用中有著廣泛的用途,例如:
      • 存儲(chǔ)和獲取連接的會(huì)話信息;
      • 存儲(chǔ)和獲取連接的統(tǒng)計(jì)信息;
      • 存儲(chǔ)和獲取連接的用戶權(quán)限信息;
      • 存儲(chǔ)和獲取連接的特定狀態(tài)信息,如是否已經(jīng)登錄等。
  • 可以通過Channelattr()方法獲取一個(gè)AttributeMap對(duì)象,用于存儲(chǔ)和獲取Attribute。其中,AttributeMap是一個(gè)接口,其默認(rèn)實(shí)現(xiàn)為DefaultAttributeMap,可以使用它來操作Attribute。
  • 用例:
public class MyHandler {
 private final Attribute<AtomicInteger> messageCounterAttr;

 public MyHandler(Channel channel) {
     messageCounterAttr = channel.attr(AttributeKey.valueOf("messageCounter"));
     messageCounterAttr.set(new AtomicInteger(0));
 }

 public void handle(Object msg) {
     // increment message counter
     AtomicInteger messageCounter = messageCounterAttr.get();
     messageCounter.incrementAndGet();

     // do other things with the message
     // ...
 }
}

源碼學(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ù)代碼的常量定義。
  • AttributeKeyChannelOption 都是 Netty 中用于為 ChannelChannelConfig 存儲(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) 方法來設(shè)置。
    • ChannelOption 適用于需要傳遞給 Netty 底層的配置參數(shù)。
  • AttributeKey 則是用于在 Channel 上存儲(chǔ)一些屬性,這些屬性通常是業(yè)務(wù)邏輯相關(guān)的,例如登錄用戶、登錄狀態(tài)等。AttributeKey 對(duì)象是一個(gè)標(biāo)識(shí)符,可以在 Channel 上存儲(chǔ)和訪問一個(gè)屬性值。
    • ChannelOption 不同,AttributeKey 存儲(chǔ)的屬性是不透明的,Netty 不知道這些屬性的含義,因?yàn)槭亲远x的。
    • AttributeKey 適用于需要在業(yè)務(wù)邏輯中存儲(chǔ)和訪問數(shù)據(jù)的場(chǎng)景,例如在一個(gè) ChannelHandler 中存儲(chǔ)和讀取登錄用戶信息。
  • Attribute用于在Channel中存儲(chǔ)一些自定義的數(shù)據(jù) ,這些數(shù)據(jù)可以被Channel中的各個(gè)處理器共享和訪問。

以上就是一文詳解Java Netty中的Constant類的詳細(xì)內(nèi)容,更多關(guān)于Netty Constant類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Async的線程池使用選擇解析

    Async的線程池使用選擇解析

    這篇文章主要為大家介紹了Async的線程池使用選擇解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • java實(shí)現(xiàn)mysql操作類分享 java連接mysql

    java實(shí)現(xiàn)mysql操作類分享 java連接mysql

    這篇文章主要介紹了java實(shí)現(xiàn)的mysql操作類示例,大家在連接數(shù)據(jù)的時(shí)候可以直接使用了
    2014-01-01
  • IDEA的TODO的使用方式

    IDEA的TODO的使用方式

    這篇文章主要介紹了IDEA的TODO的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • springboot+idea熱部署的實(shí)現(xiàn)方法(自動(dòng)刷新)

    springboot+idea熱部署的實(shí)現(xiàn)方法(自動(dòng)刷新)

    這篇文章主要介紹了springboot+idea熱部署的實(shí)現(xiàn)方法(自動(dòng)刷新),本文分步驟通過實(shí)例代碼截圖相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • java遠(yuǎn)程連接調(diào)用Rabbitmq的實(shí)例代碼

    java遠(yuǎn)程連接調(diào)用Rabbitmq的實(shí)例代碼

    本篇文章主要介紹了java遠(yuǎn)程連接調(diào)用Rabbitmq的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • SpringBoot操作Jedis案例代碼

    SpringBoot操作Jedis案例代碼

    這篇文章主要介紹了SpringBoot操作Jedis案例代碼,代碼部分包括pom依賴、配置相關(guān)參數(shù)、JedisPool的設(shè)置,代碼簡(jiǎn)單易懂對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 詳析Spring中依賴注入的三種方式

    詳析Spring中依賴注入的三種方式

    在開發(fā)的過程中突然對(duì)Spring的依賴注入幾種方式出現(xiàn)混交,打算做個(gè)簡(jiǎn)單的小結(jié),方便大家和自己以后參考借鑒,如有總結(jié)不對(duì)的地方,請(qǐng)大家不吝指教!下面來一起看看吧。
    2016-09-09
  • Spring中緩存注解@Cache的使用詳解

    Spring中緩存注解@Cache的使用詳解

    這篇文章主要介紹了Spring中緩存注解@Cache的使用詳解,使用注解對(duì)數(shù)據(jù)進(jìn)行緩存功能的框架,只需要簡(jiǎn)單地加一個(gè)注解,就能實(shí)現(xiàn)緩存功能,大大簡(jiǎn)化我們?cè)跇I(yè)務(wù)中操作緩存的代碼,需要的朋友可以參考下
    2023-07-07
  • Java開發(fā)必備知識(shí)之?dāng)?shù)組詳解

    Java開發(fā)必備知識(shí)之?dāng)?shù)組詳解

    數(shù)組對(duì)于每一門編程語(yǔ)言來說都是重要的數(shù)據(jù)結(jié)構(gòu)之一,當(dāng)然不同語(yǔ)言對(duì)數(shù)組的實(shí)現(xiàn)及處理也不盡相同.本篇文章為大家整理了Java最全關(guān)于數(shù)組的知識(shí)點(diǎn),并給出其對(duì)應(yīng)的代碼,需要的朋友可以參考下
    2021-06-06
  • Java實(shí)現(xiàn)前綴樹詳解

    Java實(shí)現(xiàn)前綴樹詳解

    Java實(shí)現(xiàn)前綴樹(Trie樹)是一種樹形數(shù)據(jù)結(jié)構(gòu),用于字符串的存儲(chǔ)和查找,適用于大量字符串的快速匹配。通過將字符串拆分為字符序列,依次構(gòu)建樹形結(jié)構(gòu),將每個(gè)字符串的字符依次存儲(chǔ)在樹的節(jié)點(diǎn)上,實(shí)現(xiàn)高效的字符串匹配
    2023-04-04

最新評(píng)論

桦川县| 塔城市| 郎溪县| 永昌县| 哈密市| 山丹县| 清徐县| 定西市| 景东| 综艺| 安阳市| 屏南县| 安达市| 阿克苏市| 云林县| 津市市| 北安市| 桐柏县| 石嘴山市| 喀喇沁旗| 郯城县| 剑阁县| 贵州省| 怀宁县| 绥芬河市| 前郭尔| 竹北市| 德格县| 元阳县| 张掖市| 策勒县| 集贤县| 柘荣县| 藁城市| 安陆市| 库伦旗| 万年县| 大足县| 湟中县| 麦盖提县| 夏河县|