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

Spring Boot 整合 RocketMQ 的全流程(消息發(fā)送、消費、重試)

 更新時間:2026年01月07日 10:56:36   作者:canjun_wen  
本文詳細介紹了 Spring Boot 整合 RocketMQ 的全流程,包括環(huán)境搭建、依賴配置、消息發(fā)送(同步 / 異步 / 單向)、消息消費(集群 / 廣播、并發(fā) / 順序)、消息重試與死信隊列處理,并提供了完整的代碼示例,感興趣的朋友跟隨小編一起看看吧

RocketMQ 作為阿里開源的分布式消息中間件,憑借高吞吐量、低延遲、高可靠性等特性,被廣泛應用于分布式系統(tǒng)的異步通信、解耦、削峰填谷等場景。Spring Boot 作為主流的微服務開發(fā)框架,其自動配置機制能極大簡化與第三方組件的整合過程。本文將從實戰(zhàn)角度出發(fā),詳細講解 Spring Boot 如何整合 RocketMQ,覆蓋普通消息發(fā)送、消息消費、消息重試等核心流程,并提供完整的代碼示例。

一、環(huán)境準備

1. 基礎環(huán)境依賴

  • JDK 8 及以上(RocketMQ 對 JDK 版本有一定要求,推薦 8/11)
  • Maven 3.6+(項目構建工具)
  • RocketMQ 4.9.7(本文使用的穩(wěn)定版本,可根據需求選擇最新版本)
  • Spring Boot 2.7.15(與 RocketMQ Starter 適配的版本)

2. RocketMQ 服務部署

首先需要搭建 RocketMQ 服務環(huán)境,可選擇本地單機部署集群部署,本文以本地單機為例:

  1. 從 RocketMQ 官網 下載對應版本的安裝包,解壓到本地目錄。
  2. 啟動 NameServer:
    # 進入 RocketMQ 解壓目錄的 bin 文件夾
    cd rocketmq-all-4.9.7-bin-release/bin
    # 啟動 NameServer(Windows 系統(tǒng)執(zhí)行 mqnamesrv.cmd)
    nohup sh mqnamesrv &
  3. 啟動 Broker:
    # 啟動 Broker(Windows 系統(tǒng)執(zhí)行 mqbroker.cmd)
    nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &

    注:autoCreateTopicEnable=true 表示自動創(chuàng)建主題,方便測試,生產環(huán)境建議提前手動創(chuàng)建主題。

二、項目初始化與依賴配置

1. 創(chuàng)建 Spring Boot 項目

通過 Spring Initializr(https://start.spring.io/)創(chuàng)建一個 Spring Boot 項目,選擇基礎依賴(如 Spring Web),也可手動創(chuàng)建 Maven 項目并配置 pom.xml。

2. 引入 RocketMQ 依賴

在 pom.xml 中添加 RocketMQ Spring Boot Starter 依賴,注意版本適配(本文使用 2.2.3 版本,與 RocketMQ 4.9.7 適配):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.15</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>spring-boot-rocketmq-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-rocketmq-demo</name>
    <description>Spring Boot RocketMQ 整合示例</description>
    <properties>
        <java.version>1.8</java.version>
        <rocketmq-spring-boot-starter.version>2.2.3</rocketmq-spring-boot-starter.version>
    </properties>
    <dependencies>
        <!-- Spring Web 依賴,用于提供接口測試 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- RocketMQ Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>${rocketmq-spring-boot-starter.version}</version>
        </dependency>
        <!-- 測試依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3. 配置 RocketMQ 連接信息

在 application.yml(或 application.properties)中配置 RocketMQ 的 NameServer 地址、生產者組等信息:

spring:
  application:
    name: spring-boot-rocketmq-demo
# RocketMQ 配置
rocketmq:
  # NameServer 地址,多個地址用分號分隔
  name-server: localhost:9876
  # 生產者配置
  producer:
    # 生產者組名,必須唯一
    group: demo-producer-group
    # 發(fā)送消息的超時時間,默認 3000ms
    send-message-timeout: 3000
    # 消息體最大長度,默認 4MB
    max-message-size: 4194304
    # 壓縮消息的閾值,默認 4KB
    compress-message-body-threshold: 4096
    # 重試次數,默認 2 次
    retry-times-when-send-failed: 2
    # 異步發(fā)送失敗時是否重試其他 Broker,默認 false
    retry-next-server: false

三、消息發(fā)送:普通消息、同步 / 異步 / 單向發(fā)送

RocketMQ 支持同步發(fā)送異步發(fā)送、單向發(fā)送三種消息發(fā)送方式,適用于不同的業(yè)務場景:

  • 同步發(fā)送:發(fā)送后等待 Broker 響應,可靠性最高,適用于重要消息(如訂單創(chuàng)建)。
  • 異步發(fā)送:發(fā)送后不阻塞,通過回調函數處理響應,適用于需要高吞吐量且允許少量延遲的場景。
  • 單向發(fā)送:發(fā)送后不等待響應,性能最高,可靠性最低,適用于日志收集等不重要消息。

1. 封裝消息發(fā)送工具類

創(chuàng)建 RocketMQProducerService 類,注入 RocketMQTemplate(由 RocketMQ Starter 提供的模板類,簡化消息發(fā)送),實現三種發(fā)送方式:

package com.example.demo.service;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.apache.rocketmq.spring.support.RocketMQHeaders;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
 * RocketMQ 生產者服務
 */
@Service
public class RocketMQProducerService {
    // 注入 RocketMQ 模板類
    @Resource
    private RocketMQTemplate rocketMQTemplate;
    /**
     * 同步發(fā)送消息
     * @param topic 主題名(可攜帶標簽,格式:topic:tag)
     * @param message 消息內容
     * @return 發(fā)送結果
     */
    public SendResult sendSyncMessage(String topic, String message) {
        // 構建消息(可添加消息頭,如自定義 key)
        Message<String> msg = MessageBuilder.withPayload(message)
                .setHeader(RocketMQHeaders.KEYS, "sync-key-" + System.currentTimeMillis())
                .build();
        // 同步發(fā)送
        return rocketMQTemplate.syncSend(topic, msg);
    }
    /**
     * 異步發(fā)送消息
     * @param topic 主題名
     * @param message 消息內容
     */
    public void sendAsyncMessage(String topic, String message) {
        Message<String> msg = MessageBuilder.withPayload(message)
                .setHeader(RocketMQHeaders.KEYS, "async-key-" + System.currentTimeMillis())
                .build();
        // 異步發(fā)送,通過 SendCallback 處理回調
        rocketMQTemplate.asyncSend(topic, msg, new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                // 發(fā)送成功處理
                System.out.println("異步發(fā)送消息成功:" + sendResult);
            }
            @Override
            public void onException(Throwable e) {
                // 發(fā)送失敗處理
                System.err.println("異步發(fā)送消息失敗:" + e.getMessage());
            }
        });
    }
    /**
     * 單向發(fā)送消息(不關心發(fā)送結果)
     * @param topic 主題名
     * @param message 消息內容
     */
    public void sendOneWayMessage(String topic, String message) {
        Message<String> msg = MessageBuilder.withPayload(message)
                .setHeader(RocketMQHeaders.KEYS, "oneway-key-" + System.currentTimeMillis())
                .build();
        // 單向發(fā)送
        rocketMQTemplate.sendOneWay(topic, msg);
    }
}

2. 編寫測試接口

創(chuàng)建 MessageSendController 控制器,提供 HTTP 接口測試消息發(fā)送:

package com.example.demo.controller;
import org.apache.rocketmq.client.producer.SendResult;
import com.example.demo.service.RocketMQProducerService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * 消息發(fā)送測試控制器
 */
@RestController
@RequestMapping("/message")
public class MessageSendController {
    @Resource
    private RocketMQProducerService rocketMQProducerService;
    // 測試同步發(fā)送
    @GetMapping("/sync/send")
    public String sendSyncMessage(@RequestParam String msg) {
        // 主題名:demo-topic,標簽:demo-tag(標簽用于消息過濾)
        String topic = "demo-topic:demo-tag";
        SendResult sendResult = rocketMQProducerService.sendSyncMessage(topic, msg);
        return "同步發(fā)送消息成功:" + sendResult;
    }
    // 測試異步發(fā)送
    @GetMapping("/async/send")
    public String sendAsyncMessage(@RequestParam String msg) {
        String topic = "demo-topic:demo-tag";
        rocketMQProducerService.sendAsyncMessage(topic, msg);
        return "異步發(fā)送消息請求已提交";
    }
    // 測試單向發(fā)送
    @GetMapping("/oneway/send")
    public String sendOneWayMessage(@RequestParam String msg) {
        String topic = "demo-topic:demo-tag";
        rocketMQProducerService.sendOneWayMessage(topic, msg);
        return "單向發(fā)送消息完成";
    }
}

四、消息消費:消費者配置與消息監(jiān)聽

RocketMQ 的消費端通過消息監(jiān)聽器監(jiān)聽指定主題的消息,Spring Boot 整合后可通過注解 @RocketMQMessageListener 快速實現消費邏輯。

1. 編寫消息消費者

創(chuàng)建 RocketMQConsumerService 類,實現 RocketMQListener 接口,通過注解配置消費者組、監(jiān)聽的主題和標簽:

package com.example.demo.consumer;
import org.apache.rocketmq.spring.annotation.ConsumeMode;
import org.apache.rocketmq.spring.annotation.MessageModel;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;
/**
 * RocketMQ 消費者服務
 * 注解說明:
 * - consumerGroup:消費者組名,必須唯一
 * - topic:監(jiān)聽的主題名
 * - selectorExpression:標簽表達式,* 表示所有標簽,也可指定具體標簽(如 demo-tag)
 * - messageModel:消息模式,CLUSTERING(集群模式)/BROADCASTING(廣播模式),默認集群模式
 * - consumeMode:消費模式,CONCURRENTLY(并發(fā)消費)/ORDERLY(順序消費),默認并發(fā)消費
 */
@Component
@RocketMQMessageListener(
        consumerGroup = "demo-consumer-group",
        topic = "demo-topic",
        selectorExpression = "*",
        messageModel = MessageModel.CLUSTERING,
        consumeMode = ConsumeMode.CONCURRENTLY
)
public class RocketMQConsumerService implements RocketMQListener<String> {
    /**
     * 消息消費邏輯
     * @param message 消息內容
     */
    @Override
    public void onMessage(String message) {
        System.out.println("接收到消息:" + message);
        // 模擬業(yè)務處理
        // 注意:消費端拋出異常會觸發(fā)消息重試
        // handleBusiness(message);
    }
    /**
     * 模擬業(yè)務處理
     * @param message 消息內容
     */
    private void handleBusiness(String message) {
        // 業(yè)務邏輯代碼
    }
}

2. 消費者核心配置說明

  • 消費者組(consumerGroup):必須唯一,同一組的消費者共同消費主題的消息(集群模式下)。
  • 消息模式(messageModel)
    • CLUSTERING(集群模式):同組消費者分攤消費消息,一條消息僅被一個消費者消費,默認模式。
    • BROADCASTING(廣播模式):同組消費者都會消費同一條消息,適用于通知類消息(如配置更新)。
  • 消費模式(consumeMode)
    • CONCURRENTLY(并發(fā)消費):多線程并發(fā)消費,消費速度快,默認模式。
    • ORDERLY(順序消費):單線程消費,保證消息按順序消費,適用于有序消息場景(如訂單狀態(tài)變更)。
  • 標簽表達式(selectorExpression):用于過濾消息,支持 *(所有標簽)、tag1 || tag2(多個標簽)等表達式。

五、消息重試:消費失敗后的重試機制

在實際業(yè)務中,消息消費可能因網絡異常、業(yè)務處理失敗等原因失敗,RocketMQ 提供了消費重試機制,確保消息被成功消費。

1. 重試機制原理

  • 默認重試:當消費者消費消息時拋出異常,RocketMQ 會將消息重新放入隊列,等待重試消費,默認重試次數為 16 次(每次重試的間隔時間逐漸增加:1s、5s、10s、30s、1min、2min、3min、4min、5min、6min、7min、8min、9min、10min、20min、30min)。
  • 死信隊列:當消息重試 16 次后仍消費失敗,會被發(fā)送到死信隊列(DLQ),死信隊列的命名規(guī)則為:%DLQ%+消費者組名,可通過消費死信隊列的消息進行人工處理。

2. 自定義重試配置與異常處理

(1)配置消費重試次數

在 application.yml 中添加消費者的重試配置(也可通過注解屬性配置):

# 消費者重試配置(可在注解中覆蓋)
rocketmq:
  consumer:
    # 消費線程數
    consume-thread-max: 20
    # 批量消費的最大消息數
    consume-message-batch-max-size: 1
    # 消費超時時間
    consume-timeout: 15

(2)手動控制重試:返回消費狀態(tài)

上述示例中,消費者實現的是 RocketMQListener 接口,無法手動控制消費狀態(tài),若需要自定義重試邏輯,可實現 RocketMQPushConsumerListener 接口(或使用 MessageListenerConcurrently),返回 ConsumeConcurrentlyStatus 枚舉:

package com.example.demo.consumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.apache.rocketmq.spring.core.RocketMQPushConsumerLifecycleListener;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * 自定義重試邏輯的消費者
 */
@Component
@RocketMQMessageListener(
        consumerGroup = "demo-consumer-group-retry",
        topic = "demo-topic",
        selectorExpression = "*"
)
public class RetryRocketMQConsumerService implements RocketMQListener<MessageExt>, RocketMQPushConsumerLifecycleListener {
    @Override
    public void onMessage(MessageExt messageExt) {
        String message = new String(messageExt.getBody());
        System.out.println("接收到消息(帶重試邏輯):" + message + ",重試次數:" + messageExt.getReconsumeTimes());
        try {
            // 模擬業(yè)務處理失敗
            int a = 1 / 0;
            // 業(yè)務處理成功,無需重試
        } catch (Exception e) {
            System.err.println("消息消費失?。? + e.getMessage());
            // 若重試次數超過 3 次,直接返回成功(不再重試),否則拋出異常觸發(fā)重試
            if (messageExt.getReconsumeTimes() >= 3) {
                System.out.println("消息重試次數已達上限,不再重試");
                // 可將消息記錄到數據庫,后續(xù)人工處理
                return;
            }
            // 拋出異常,觸發(fā)重試
            throw new RuntimeException("消費失敗,觸發(fā)重試");
        }
    }
    @Override
    public void prepareStart(org.apache.rocketmq.client.consumer.DefaultMQPushConsumer consumer) {
        // 可自定義消費者配置,如設置重試次數
        try {
            // 設置消費線程數
            consumer.setConsumeThreadMax(20);
            // 設置消息監(jiān)聽器(若需要更細粒度的控制)
            consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
                for (MessageExt msg : msgs) {
                    onMessage(msg);
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            });
        } catch (MQClientException e) {
            throw new RuntimeException(e);
        }
    }
}

3. 死信隊列處理

當消息進入死信隊列后,可創(chuàng)建專門的消費者監(jiān)聽死信隊列,進行人工干預處理:

package com.example.demo.consumer;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;
/**
 * 死信隊列消費者
 * 死信隊列名稱:%DLQ% + 原消費者組名
 */
@Component
@RocketMQMessageListener(
        consumerGroup = "dlq-consumer-group",
        topic = "%DLQ%demo-consumer-group",
        selectorExpression = "*"
)
public class DlqRocketMQConsumerService implements RocketMQListener<String> {
    @Override
    public void onMessage(String message) {
        System.out.println("接收到死信隊列消息:" + message);
        // 人工處理邏輯,如記錄日志、通知運維、手動重試等
    }
}

六、測試驗證

1. 啟動項目

運行 Spring Boot 項目的主類,確保 RocketMQ NameServer 和 Broker 已啟動。

2. 發(fā)送消息測試

通過 HTTP 接口發(fā)送消息,例如:

  • 同步發(fā)送:http://localhost:8080/message/sync/send?msg=Hello RocketMQ Sync
  • 異步發(fā)送:http://localhost:8080/message/async/send?msg=Hello RocketMQ Async
  • 單向發(fā)送:http://localhost:8080/message/oneway/send?msg=Hello RocketMQ OneWay

3. 驗證消費與重試

觀察控制臺輸出,可看到消費者成功接收消息;若在消費端模擬業(yè)務異常(如除以 0),可看到消息重試的日志,重試次數達到上限后進入死信隊列。

七、生產環(huán)境注意事項

  1. 主題與消費者組規(guī)劃:提前手動創(chuàng)建主題(關閉自動創(chuàng)建),消費者組名需唯一且有明確的業(yè)務含義。
  2. 消息重試配置:根據業(yè)務場景調整重試次數和間隔,避免無效重試占用資源。
  3. 死信隊列處理:建立死信隊列的監(jiān)控和處理機制,防止消息丟失。
  4. 消息冪等性:由于消息重試,消費端需保證冪等性(如通過消息 key 去重)。
  5. 監(jiān)控與告警:接入 RocketMQ 監(jiān)控平臺(如 RocketMQ Dashboard),監(jiān)控消息發(fā)送 / 消費情況,設置告警機制。
  6. 集群部署:生產環(huán)境中 RocketMQ 需采用集群部署,保證高可用。

八、總結

本文詳細介紹了 Spring Boot 整合 RocketMQ 的全流程,包括環(huán)境搭建、依賴配置、消息發(fā)送(同步 / 異步 / 單向)、消息消費(集群 / 廣播、并發(fā) / 順序)、消息重試與死信隊列處理,并提供了完整的代碼示例。通過本文的實戰(zhàn)內容,你可以快速掌握 RocketMQ 在 Spring Boot 項目中的核心使用方式,并根據實際業(yè)務場景進行擴展和優(yōu)化。RocketMQ 的功能遠不止于此,后續(xù)還可深入學習順序消息、事務消息、延遲消息等高級特性,進一步滿足復雜的業(yè)務需求。

到此這篇關于Spring Boot 整合 RocketMQ 的全流程(消息發(fā)送、消費、重試)的文章就介紹到這了,更多相關Spring Boot 整合 RocketMQ內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • springboot?vue測試前端項目管理列表分頁功能實現

    springboot?vue測試前端項目管理列表分頁功能實現

    這篇文章主要為大家介紹了springboot?vue測試前端項目列表分頁功能實現,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • java從命令行獲取數據的三種方式代碼實例

    java從命令行獲取數據的三種方式代碼實例

    這篇文章主要介紹了java從命令行獲取數據的三種方式代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • mybatis-plus通用枚舉@JsonValue接收參數報錯No enum constant

    mybatis-plus通用枚舉@JsonValue接收參數報錯No enum constant

    最近在使用mybatis-plus時用到了通用枚舉,遇到了問題,本文主要介紹了mybatis-plus通用枚舉@JsonValue接收參數報錯No enum constant,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • java圖片驗證碼生成教程詳解

    java圖片驗證碼生成教程詳解

    這篇文章主要為大家詳細介紹了java圖片驗證碼生成教程,從簡單到復雜,從本地到前后臺,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Java內存區(qū)域與內存溢出異常分析與解決

    Java內存區(qū)域與內存溢出異常分析與解決

    在?Java?開發(fā)中,內存管理和內存溢出異常是一個至關重要的主題,本文將深入探討?Java?的內存區(qū)域及其對應的內存溢出異常,希望對大家有所幫助
    2025-05-05
  • springboot結合JWT實現單點登錄的示例

    springboot結合JWT實現單點登錄的示例

    本文主要介紹了springboot結合JWT實現單點登錄的示例,包括生成Token、驗證Token及使用Redis存儲Token,具有一定的參考價值,感興趣的可以了解一下
    2025-01-01
  • 基于Idea+Jconsole實現線程監(jiān)控步驟

    基于Idea+Jconsole實現線程監(jiān)控步驟

    這篇文章主要介紹了基于Idea+Jconsole實現線程監(jiān)控功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Java StringBuffer與StringBuilder有什么區(qū)別

    Java StringBuffer與StringBuilder有什么區(qū)別

    當對字符串進行修改的時候,需要使用 StringBuffer 和 StringBuilder類,和String類不同的是,StringBuffer和 StringBuilder類的對象能夠被多次的修改,并且不產生新的未使用對象,本篇我們來分析分析它們的區(qū)別
    2023-01-01
  • SpringBoot+Docker+IDEA實現一鍵構建+推送、運行、同鏡像多容器啟動

    SpringBoot+Docker+IDEA實現一鍵構建+推送、運行、同鏡像多容器啟動

    這篇文章主要介紹了SpringBoot+Docker+IDEA實現一鍵構建+推送、運行、同鏡像多容器啟動,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Java8 HashMap擴容算法實例解析

    Java8 HashMap擴容算法實例解析

    這篇文章主要介紹了Java8 HashMap擴容算法實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12

最新評論

鲁甸县| 汕头市| 巨野县| 济宁市| 建德市| 鄂托克前旗| 华阴市| 青州市| 库伦旗| 彭阳县| 南召县| 莫力| 甘德县| 慈利县| 奉化市| 资阳市| 垣曲县| 和田市| 青冈县| 灵武市| 天镇县| 罗山县| 张家川| 阿荣旗| 常宁市| 嵊泗县| 马边| 运城市| 万盛区| 两当县| 永康市| 治县。| 安远县| 定南县| 广州市| 大足县| 屯留县| 灵宝市| 汉寿县| 尼木县| 上虞市|