亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java并發(fā)Map面試線程安全數(shù)據(jù)結構全面分析

 更新時間:2023年09月19日 10:16:54   作者:flydean  
本文將探討如何在Java中有效地應對這些挑戰(zhàn),介紹一種強大的工具并發(fā)Map,它能夠幫助您管理多線程環(huán)境下的共享數(shù)據(jù),確保數(shù)據(jù)的一致性和高性能,深入了解Java中的并發(fā)Map實現(xiàn),包括ConcurrentHashMap和ConcurrentSkipListMap,及相關知識點

簡介

在計算機軟件開發(fā)的世界里,多線程編程是一個重要且令人興奮的領域。然而,與其引人入勝的潛力相伴而來的是復雜性和挑戰(zhàn),其中之一就是處理共享數(shù)據(jù)。當多個線程同時訪問和修改共享數(shù)據(jù)時,很容易出現(xiàn)各種問題,如競態(tài)條件和數(shù)據(jù)不一致性。

無論您是初學者還是有經(jīng)驗的開發(fā)人員,都會在本文中找到有關并發(fā)編程的有用信息,以及如何在項目中應用這些知識的指導。讓我們開始這個令人興奮的多線程之旅吧!

并發(fā)問題

在深入了解并發(fā)Map之前,讓我們首先探討一下多線程編程中常見的問題。在多線程環(huán)境中,多個線程可以同時訪問和修改共享數(shù)據(jù),這可能導致以下問題:

1. 競態(tài)條件

競態(tài)條件是指多個線程試圖同時訪問和修改共享數(shù)據(jù),而最終的結果取決于線程的執(zhí)行順序。這種不確定性可能導致不一致的結果,甚至是程序崩潰。

class Counter {
    private int value = 0;
    public void increment() {
        value++;
    }
    public int getValue() {
        return value;
    }
}

在上面的示例中,如果兩個線程同時調用increment方法,可能會導致計數(shù)器的值不正確。

2. 數(shù)據(jù)不一致性

在多線程環(huán)境中,數(shù)據(jù)的不一致性是一個常見問題。當一個線程修改了共享數(shù)據(jù),其他線程可能不會立即看到這些修改,因為緩存和線程本地內(nèi)存的存在。這可能導致線程之間看到不同版本的數(shù)據(jù),從而引發(fā)錯誤。

3. 為什么需要并發(fā)Map?

現(xiàn)在,您可能會想知道如何解決這些問題。這就是并發(fā)Map派上用場的地方。并發(fā)Map是一種數(shù)據(jù)結構,它專為多線程環(huán)境設計,提供了一種有效的方式來處理共享數(shù)據(jù)。它允許多個線程同時讀取和修改數(shù)據(jù),同時確保數(shù)據(jù)的一致性和線程安全性。

Java并發(fā)Map的概述

現(xiàn)在,讓我們深入了解Java標準庫中提供的不同并發(fā)Map實現(xiàn),以及它們的特點和適用場景。

1. ConcurrentHashMap

ConcurrentHashMap 是Java標準庫中最常用的并發(fā)Map實現(xiàn)之一。它使用分段鎖(Segment)來實現(xiàn)高并發(fā)訪問,每個分段鎖只鎖定一部分數(shù)據(jù),從而降低了鎖的爭用。這使得多個線程可以同時讀取不同部分的數(shù)據(jù),提高了性能。

ConcurrentMap<KeyType, ValueType> map = new ConcurrentHashMap<>();
map.put(key, value);
ValueType result = map.get(key);

ConcurrentHashMap適用于大多數(shù)多線程應用程序,尤其是讀多寫少的情況。

2. ConcurrentSkipListMap

ConcurrentSkipListMap 是另一個有趣的并發(fā)Map實現(xiàn),它基于跳表(Skip List)數(shù)據(jù)結構構建。它提供了有序的映射,而不僅僅是鍵值對的存儲。這使得它在某些情況下成為更好的選擇,例如需要按鍵排序的情況。

ConcurrentMap<KeyType, ValueType> map = new ConcurrentSkipListMap<>();
map.put(key, value);
ValueType result = map.get(key);

ConcurrentSkipListMap適用于需要有序映射的情況,它在一些特定應用中性能表現(xiàn)出色。

3. 其他Java并發(fā)Map實現(xiàn)

除了ConcurrentHashMap和ConcurrentSkipListMap之外,Java生態(tài)系統(tǒng)還提供了其他一些并發(fā)Map實現(xiàn),例如Google Guava庫中的ConcurrentMap實現(xiàn),以及Java 8中對ConcurrentHashMap的增強功能。另外,還有一些第三方庫,如Caffeine和Ehcache,提供了高性能的緩存和并發(fā)Map功能。

ConcurrentHashMap詳解

現(xiàn)在,讓我們深入研究ConcurrentHashMap,了解它的內(nèi)部實現(xiàn)和線程安全機制。

內(nèi)部實現(xiàn)

ConcurrentHashMap的內(nèi)部實現(xiàn)基于哈希表和分段鎖。它將數(shù)據(jù)分成多個段(Segment),每個段都是一個獨立的哈希表,擁有自己的鎖。這意味著在大多數(shù)情況下,不同段的數(shù)據(jù)可以被不同線程同時訪問,從而提高了并發(fā)性能。

常用操作

ConcurrentHashMap支持許多常見的操作,包括put、get、remove等。下面是一些示例:

ConcurrentMap<KeyType, ValueType> map = new ConcurrentHashMap<>();
map.put(key, value);
ValueType result = map.get(key);
map.remove(key);

這些操作是線程安全的,多個線程可以同時調用它們而不會導致競態(tài)條件。

示例代碼

以下是一個簡單的示例,演示如何在多線程環(huán)境中使用ConcurrentHashMap來管理共享數(shù)據(jù):

import java.util.concurrent.*;
public class ConcurrentMapExample {
    public static void main(String[] args) {
        ConcurrentMap<String, Integer> map = new ConcurrentHashMap<>();
        // 創(chuàng)建多個線程并發(fā)地增加計數(shù)器的值
        int numThreads = 4;
        ExecutorService executor = Executors.newFixedThreadPool(numThreads);
        for (int i = 0; i < numThreads; i++) {
            executor.submit(() -> {
                for (int j = 0; j < 1000; j++) {
                    map.merge("key", 1, Integer::sum);
                }
            });
        }
        executor.shutdown();
        try {
            executor.awaitTermination(1, TimeUnit.MINUTES);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Final Count: " + map.get("key")); // 應該是4000
    }
}

在上面的示例中,我們創(chuàng)建了一個ConcurrentHashMap來存儲計數(shù)器的值,并使用多個線程并發(fā)地增加這個值。最終,我們可以得到正確的結果,而不需要顯式的鎖定或同步操作。

ConcurrentHashMap的強大之處在于它提供了高性能的并發(fā)操作,同時保持了數(shù)據(jù)的一致性和線程安全性。在多線程應用程序中,它是一個強大的工具,可用于管理共享數(shù)據(jù)。

ConcurrentSkipListMap的用途

在本節(jié)中,我們將探討ConcurrentSkipListMap的獨特之處以及在某些情況下為什么選擇它。同時,我們將演示如何將有序映射與并發(fā)性結合使用。

獨特之處

ConcurrentSkipListMap是基于跳表(Skip List)數(shù)據(jù)結構構建的,與傳統(tǒng)的哈希表不同。它有以下特點:

  • 有序性: ConcurrentSkipListMap中的元素是有序的,按鍵進行排序。這使得它非常適合需要按鍵順序訪問數(shù)據(jù)的場景。
  • 高并發(fā)性: 跳表的結構允許多個線程并發(fā)地訪問和修改數(shù)據(jù),而不需要像分段鎖那樣精細的鎖定。
  • 動態(tài)性: ConcurrentSkipListMap具有自動調整大小的能力,因此它可以在數(shù)據(jù)量變化時保持高效性能。

示例

下面是一個示例,演示了如何使用ConcurrentSkipListMap來存儲一組學生的分數(shù),并按照分數(shù)從高到低進行排序:

import java.util.concurrent.ConcurrentSkipListMap;
public class StudentScores {
    public static void main(String[] args) {
        ConcurrentSkipListMap<Integer, String> scores = new ConcurrentSkipListMap<>();
        scores.put(90, "Alice");
        scores.put(80, "Bob");
        scores.put(95, "Charlie");
        scores.put(88, "David");
        // 遍歷并輸出按分數(shù)排序的學生名單
        scores.descendingMap().forEach((score, name) -> {
            System.out.println(name + ": " + score);
        });
    }
}

在上面的示例中,我們創(chuàng)建了一個ConcurrentSkipListMap來存儲學生的分數(shù)和姓名,并使用descendingMap()方法按照分數(shù)從高到低遍歷和輸出學生名單。這展示了ConcurrentSkipListMap在需要有序映射的情況下的優(yōu)勢。

ConcurrentSkipListMap通常用于需要高并發(fā)性和有序性的場景,例如在線排行榜、事件調度器等。然而,它的性能可能會略低于ConcurrentHashMap,具體取決于使用情況和需求。

其他Java并發(fā)Map實現(xiàn)

除了Java標準庫中的ConcurrentHashMap和ConcurrentSkipListMap之外,還有其他一些Java并發(fā)Map實現(xiàn),它們提供了不同的特性和適用場景。

1. Google Guava庫中的ConcurrentMap

Google Guava庫提供了一個名為MapMaker的工具,用于創(chuàng)建高性能的并發(fā)Map。這個工具允許您配置各種選項,例如并發(fā)級別、過期時間和數(shù)據(jù)清理策略。這使得它非常適合需要自定義行為的場景。

ConcurrentMap&lt;KeyType, ValueType&gt; map = new MapMaker()
    .concurrencyLevel(4)
    .expireAfterWrite(10, TimeUnit.MINUTES)
    .makeMap();

2. Java 8中的ConcurrentHashMap增強功能

Java 8引入了一些對ConcurrentHashMap的增強功能,包括更好的并發(fā)性能和更豐富的API。其中一個重要的改進是引入了computecomputeIfAbsent等方法,使得在并發(fā)環(huán)境中更容易進行復雜的操作。

ConcurrentMap&lt;KeyType, ValueType&gt; map = new ConcurrentHashMap&lt;&gt;();

map.compute(key, (k, v) -&gt; {
    if (v == null) {
        return initializeValue();
    } else {
        return modifyValue(v);
    }
});

這些增強功能使得ConcurrentHashMap更加強大和靈活,適用于各種多線程應用程序。

3. 第三方并發(fā)Map庫

除了標準庫和Guava之外,還有一些第三方庫提供了高性能的并發(fā)Map實現(xiàn),例如Caffeine和Ehcache。這些庫通常專注于緩存和數(shù)據(jù)存儲領域,并提供了豐富的功能和配置選項,以滿足不同應用程序的需求。

性能考慮

在使用并發(fā)Map時,性能是一個關鍵考慮因素。以下是一些性能優(yōu)化策略,可幫助您充分利用并發(fā)Map的潛力。

  • 調整并發(fā)級別

大多數(shù)并發(fā)Map實現(xiàn)允許您調整并發(fā)級別,這決定了底層數(shù)據(jù)結構中的分段數(shù)量。較高的并發(fā)級別通常意味著更多的分段,從而減少了鎖爭用。但請注意,過高的并發(fā)級別可能會導致內(nèi)存開銷增加。在選擇并發(fā)級別時,需要根據(jù)實際負載和硬件配置進行評估和測試。

  • 選擇合適的哈希函數(shù)

并發(fā)Map的性能與哈希函數(shù)的選擇密切相關。好的哈希函數(shù)應該分散鍵的分布,以減少碰撞(多個鍵映射到同一個分段的情況)。通常,Java標準庫中的并發(fā)Map會提供默認的哈希函數(shù),但如果您的鍵具有特殊的分布特征,考慮自定義哈希函數(shù)可能會提高性能。

  • 使用合適的數(shù)據(jù)結構

除了ConcurrentHashMap和ConcurrentSkipListMap之外,還有其他并發(fā)數(shù)據(jù)結構,如ConcurrentLinkedQueue和ConcurrentLinkedDeque,它們適用于不同的應用場景。選擇合適的數(shù)據(jù)結構對于性能至關重要。例如,如果需要高效的隊列操作,可以選擇ConcurrentLinkedQueue。

  • 性能測試和比較

在項目中使用并發(fā)Map之前,建議進行性能測試和比較,以確保所選的實現(xiàn)能夠滿足性能需求??梢允褂没鶞蕼y試工具來評估不同實現(xiàn)在不同工作負載下的性能表現(xiàn),并根據(jù)測試結果做出明智的選擇。

在多線程應用程序中,性能問題可能隨著并發(fā)程度的增加而變得更加復雜,因此性能測試和調優(yōu)是確保系統(tǒng)穩(wěn)定性和高性能的關鍵步驟。

性能是多線程應用程序中的關鍵問題之一,了解并發(fā)Map的性能優(yōu)化策略對于構建高性能的多線程應用程序至關重要。選擇適當?shù)牟l(fā)Map實現(xiàn)、調整并發(fā)級別、選擇良好的哈希函數(shù)以及進行性能測試都是確保應用程序能夠充分利用多核處理器的重要步驟。

分布式并發(fā)Map

在分布式系統(tǒng)中,處理并發(fā)數(shù)據(jù)訪問問題變得更加復雜。多個節(jié)點可能同時嘗試訪問和修改共享數(shù)據(jù),而這些節(jié)點可能分布在不同的物理位置上。為了解決這個問題,可以使用分布式并發(fā)Map。

分布式并發(fā)Map的概念

分布式并發(fā)Map是一種數(shù)據(jù)結構,它允許多個節(jié)點在分布式環(huán)境中協(xié)同工作,共享和操作數(shù)據(jù)。它需要解決網(wǎng)絡延遲、數(shù)據(jù)一致性和故障容忍等問題,以確保數(shù)據(jù)的可靠性和正確性。

開源分布式數(shù)據(jù)存儲系統(tǒng)

有一些開源分布式數(shù)據(jù)存儲系統(tǒng)可以用作分布式并發(fā)Map的基礎,其中一些常見的包括:

  • Apache ZooKeeper: ZooKeeper是一個分布式協(xié)調服務,提供了分布式數(shù)據(jù)結構和鎖。它可以用于管理共享配置、協(xié)調分布式任務和實現(xiàn)分布式并發(fā)Map。
  • Redis: Redis是一個內(nèi)存存儲數(shù)據(jù)庫,它支持復雜的數(shù)據(jù)結構,包括哈希表(Hash)和有序集合(Sorted Set),可以用于構建分布式并發(fā)Map。
  • Apache Cassandra: Cassandra是一個高度可擴展的分布式數(shù)據(jù)庫系統(tǒng),它具有分布式Map的特性,可用于分布式數(shù)據(jù)存儲和檢索。

分布式Map的挑戰(zhàn)

分布式并發(fā)Map面臨一些挑戰(zhàn),包括:

  • 一致性和可用性: 在分布式環(huán)境中,維護數(shù)據(jù)的一致性和可用性是一項艱巨的任務。分布式系統(tǒng)需要解決網(wǎng)絡分區(qū)、故障恢復和數(shù)據(jù)同步等問題,以確保數(shù)據(jù)的正確性和可用性。
  • 性能: 分布式Map需要在不同節(jié)點之間傳輸數(shù)據(jù),這可能會引入網(wǎng)絡延遲。因此,在分布式環(huán)境中優(yōu)化性能是一個重要的考慮因素。
  • 并發(fā)控制: 多個節(jié)點可能同時嘗試訪問和修改數(shù)據(jù),需要實現(xiàn)適當?shù)牟l(fā)控制機制,以避免沖突和數(shù)據(jù)不一致性。

結合分布式Map與其他并發(fā)數(shù)據(jù)結構

在構建復雜的多線程應用程序時,通常需要將分布式Map與其他并發(fā)數(shù)據(jù)結構結合使用。例如,可以將分布式Map用于跨節(jié)點的數(shù)據(jù)共享,同時使用本地的ConcurrentHashMap等數(shù)據(jù)結構來處理節(jié)點內(nèi)的并發(fā)操作。

在分布式系統(tǒng)中,設計和實現(xiàn)分布式Map需要深入了解分布式系統(tǒng)的原理和工具,以確保數(shù)據(jù)的一致性和可用性。同時,也需要考慮數(shù)據(jù)的分片和分布策略,以提高性能和擴展性。

將并發(fā)Map與其他并發(fā)數(shù)據(jù)結構結合使用

在多線程應用程序中,通常需要將并發(fā)Map與其他并發(fā)數(shù)據(jù)結構結合使用,以構建復雜的多線程應用程序并解決各種并發(fā)問題。以下是一些示例和最佳實踐,說明如何將它們結合使用。

1. 并發(fā)隊列

并發(fā)隊列(Concurrent Queue)是一種常見的數(shù)據(jù)結構,用于在多線程環(huán)境中進行數(shù)據(jù)交換和協(xié)作??梢允褂貌l(fā)隊列來實現(xiàn)生產(chǎn)者-消費者模式,從而有效地處理數(shù)據(jù)流。

ConcurrentQueue<Item> queue = new ConcurrentLinkedQueue<>();
// 生產(chǎn)者線程
queue.offer(item);
// 消費者線程
Item item = queue.poll();

2. 信號量

信號量是一種用于控制并發(fā)訪問資源的機制。它可以用于限制同時訪問某個資源的線程數(shù)量。

Semaphore semaphore = new Semaphore(maxConcurrentThreads);
// 線程嘗試獲取信號量
try {
    semaphore.acquire();
    // 執(zhí)行受信號量保護的操作
} catch (InterruptedException e) {
    e.printStackTrace();
} finally {
    semaphore.release();
}

3. 讀寫鎖

讀寫鎖是一種用于管理讀寫操作的鎖機制,它允許多個線程同時讀取數(shù)據(jù),但只允許一個線程寫入數(shù)據(jù)。

ReadWriteLock lock = new ReentrantReadWriteLock();
// 讀取操作
lock.readLock().lock();
try {
    // 執(zhí)行讀取操作
} finally {
    lock.readLock().unlock();
}
// 寫入操作
lock.writeLock().lock();
try {
    // 執(zhí)行寫入操作
} finally {
    lock.writeLock().unlock();
}

最佳實踐和注意事項

在多線程編程中,遵循最佳實踐和注意事項是確保應用程序的穩(wěn)定性和性能的關鍵。以下是一些關鍵的最佳實踐和注意事項:

  • 避免鎖定整個Map: 盡量只鎖定需要修改的部分數(shù)據(jù),以減小鎖的粒度,提高并發(fā)性能。例如,使用分段鎖或讀寫鎖來限制對特定部分數(shù)據(jù)的訪問。
  • 考慮迭代器的安全性: 當在多線程環(huán)境中遍歷并發(fā)Map時,需要確保迭代器的安全性。某些操作可能需要鎖定整個Map來確保迭代器的正確性。
  • 避免空值: 注意處理并發(fā)Map中的空值。使用putIfAbsent等方法來確保值不為空。
  • 異常處理: 在多線程環(huán)境中,異常處理尤為重要。確保捕獲和處理異常,以避免線程崩潰和數(shù)據(jù)不一致性。
  • 性能測試和調優(yōu): 在實際項目中,性能測試和調優(yōu)是至關重要的步驟。根據(jù)實際需求進行性能測試,并根據(jù)測試結果進行必要的調整。
  • 文檔和注釋: 編寫清晰的文檔和注釋,以便其他開發(fā)人員理解并發(fā)Map的使用方式和注意事項。
  • 線程安全編程: 線程安全編程是多線程應用程序的基礎。確保您的代碼符合線程安全原則,避免共享數(shù)據(jù)的直接訪問,使用合適的同步機制來保護共享數(shù)據(jù)。
  • 異常情況處理: 考慮如何處理異常情況,例如死鎖、超時和資源不足。實現(xiàn)適當?shù)腻e誤處理和回退策略。
  • 監(jiān)控和日志記錄: 添加監(jiān)控和日志記錄以跟蹤應用程序的性能和行為。這可以幫助您及時發(fā)現(xiàn)問題并進行調整。
  • 并發(fā)安全性檢查工具: 使用工具和庫來輔助檢查并發(fā)安全性問題,例如靜態(tài)分析工具和代碼審查。

最后,不要忘記線程安全編程的基本原則:最小化共享狀態(tài),最大化不可變性。盡量減少多個線程之間的共享數(shù)據(jù),而是將數(shù)據(jù)不可變化或限制在需要同步的最小范圍內(nèi)。這將有助于減少競態(tài)條件和數(shù)據(jù)不一致性的可能性。

總結

本文深入探討了并發(fā)Map的概念、實現(xiàn)和性能優(yōu)化策略。我們介紹了Java標準庫中的ConcurrentHashMap和ConcurrentSkipListMap,以及其他Java并發(fā)Map實現(xiàn)和分布式并發(fā)Map的概念。我們還討論了將并發(fā)Map與其他并發(fā)數(shù)據(jù)結構結合使用的最佳實踐和注意事項。

在多線程應用程序中,正確使用并發(fā)Map可以幫助您管理共享數(shù)據(jù),提高性能,并確保數(shù)據(jù)的一致性和線程安全性。同時,線程安全編程的良好實踐是確保應用程序穩(wěn)定性和可維護性的關鍵。希望本文對您在多線程編程中的工作有所幫助!

以上就是Java并發(fā)Map面試線程安全數(shù)據(jù)結構全面分析的詳細內(nèi)容,更多關于Java并發(fā)Map線程安全數(shù)據(jù)結構的資料請關注腳本之家其它相關文章!

相關文章

  • Springboot如何使用.yml配置端口號

    Springboot如何使用.yml配置端口號

    這篇文章主要介紹了Springboot如何使用.yml配置端口號問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java實現(xiàn)在原有日期時間上加幾個月或幾天

    java實現(xiàn)在原有日期時間上加幾個月或幾天

    這篇文章主要介紹了java實現(xiàn)在原有日期時間上加幾個月或幾天,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 詳解SpringMVC加載配置Properties文件的幾種方式

    詳解SpringMVC加載配置Properties文件的幾種方式

    這篇文章主要介紹了詳解SpringMVC加載配置Properties文件的幾種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Java實現(xiàn)ATM系統(tǒng)超全面步驟解讀建議收藏

    Java實現(xiàn)ATM系統(tǒng)超全面步驟解讀建議收藏

    這篇文章主要為大家詳細介紹了用Java實現(xiàn)簡單ATM機功能,文中實現(xiàn)流程寫的非常清晰全面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java計時器工具StopWatch的具體使用

    Java計時器工具StopWatch的具體使用

    計時器在很多地方都可以用到,本文主要介紹了Java計時器工具StopWatch的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • SpringBoot bean查詢加載順序流程詳解

    SpringBoot bean查詢加載順序流程詳解

    當你在項目啟動時需要提前做一個業(yè)務的初始化工作時,或者你正在開發(fā)某個中間件需要完成自動裝配時。你會聲明自己的Configuration類,但是可能你面對的是好幾個有互相依賴的Bean
    2023-03-03
  • java實現(xiàn)四子棋游戲

    java實現(xiàn)四子棋游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)四子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Java實現(xiàn)簡單掃雷程序

    Java實現(xiàn)簡單掃雷程序

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單掃雷程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Mybatis反向工程出現(xiàn)BigDecimal類型問題及解決

    Mybatis反向工程出現(xiàn)BigDecimal類型問題及解決

    這篇文章主要介紹了Mybatis反向工程出現(xiàn)BigDecimal類型問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • springboot實現(xiàn)yml里的自定義配置方法

    springboot實現(xiàn)yml里的自定義配置方法

    這篇文章主要介紹了springboot實現(xiàn)yml里的自定義配置方法,主要介紹三種,字符串配置,數(shù)組配置和帶默認值的配置,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論