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

詳解Java設(shè)計(jì)模式之單例模式

 更新時(shí)間:2023年05月23日 08:31:21   作者:十二Y  
單例模式是一種創(chuàng)建型設(shè)計(jì)模式,它的目的是確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn)來訪問該實(shí)例,在單例模式中,類自身負(fù)責(zé)創(chuàng)建自己的唯一實(shí)例,并確保在系統(tǒng)中只有一個(gè)實(shí)例存在,本文詳細(xì)介紹了Java設(shè)計(jì)模式中的單例模式,感興趣的同學(xué)可以參考閱讀

1、單例模式介紹

單例模式(Singleton),保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。

通常我們可以讓一個(gè)全局變量使得一個(gè)對(duì)象被訪問,但它不能防止你 實(shí)例化多個(gè)對(duì)象。一個(gè)最好的辦法就是,讓類自身負(fù)責(zé)保存它的唯一實(shí)例。 這個(gè)類可以保證沒有其他實(shí)例可以被創(chuàng)建,并且它可以提供一個(gè)訪問該實(shí)例 的方法。

1.1 單例模式結(jié)構(gòu)圖

Singleton類,定義一個(gè)GetInstance操作,允許客戶訪問它的唯一實(shí)例。GetInstance是一個(gè)靜態(tài)方法,主要負(fù)責(zé)創(chuàng)建自己的唯一實(shí)例。

/**
 * @author Shier
 * CreateTime 2023/5/14 9:23
 * 單例模式
 */
public class Singleton {
    private static Singleton singleton;
    /**
     * 無參構(gòu)造 防止外部代碼利用new來實(shí)例化的可能
     */
    private Singleton() {
    }
    /**
     * 只能通過此途徑獲取Singleton實(shí)例
     * @return
     */
    public static Singleton getInstance() {
        // 為空,則創(chuàng)建實(shí)例
        if (singleton == null) {
            singleton = new Singleton();
        }
        // 不為空,則已創(chuàng)建,直接返回實(shí)例
        return singleton;
    }
}

客戶端:

/**
 * @author Shier
 * CreateTime 2023/5/14 9:27
 */
public class SingletonClient {
    public static void main(String[] args) {
        Singleton instance1 = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();
        if (instance1 == instance2) {
            System.out.println("兩個(gè)是同一個(gè)實(shí)例對(duì)象");
        }
    }
}

最終得到的:“兩個(gè)是同一個(gè)實(shí)例對(duì)象”,因此單例模式保證了可以被唯一實(shí)例化。當(dāng)然單例模式不止這些好處。下面再來細(xì)說

2、具體例子說明

假設(shè)我們有一個(gè)流水號(hào)生成器,用于在系統(tǒng)中生成唯一的流水號(hào)。這個(gè)流水號(hào)生成器需要保證在整個(gè)系統(tǒng)中只有一個(gè)實(shí)例存在,以確保生成的流水號(hào)是唯一的。也就是類似于我們?cè)谕饷娉燥堻c(diǎn)菜呀什么的,買單后,商家會(huì)給你一個(gè)單號(hào),到你了,就讓你去拿屬于你的飯菜。

2.1 不使用單例模式

首先,我們創(chuàng)建一個(gè)名為SerialNumberGenerator的類,用于生成流水號(hào):

/**
 * @author Shier
 * CreateTime 2023/5/14 9:30
 * 流水號(hào)例子
 */
public class SerialNumberGenerator {
    private int serialNumber;
    /**
     * 外界可以實(shí)例化SerialNumberGenerator
     */
    public SerialNumberGenerator() {
        serialNumber = 0;
    }
    public int generateSerialNumber() {
        serialNumber++;
        return serialNumber;
    }
}

現(xiàn)在,我們可以在不同的地方創(chuàng)建多個(gè)SerialNumberGenerator的實(shí)例并嘗試生成流水號(hào):

/**
 * @author Shier
 * CreateTime 2023/5/14 9:31
 * 客戶端
 */
public class Main {
    public static void main(String[] args) {
        SerialNumberGenerator generator1 = new SerialNumberGenerator();
        int serialNumber1 = generator1.generateSerialNumber();
        System.out.println("流水號(hào)1: " + serialNumber1);
        SerialNumberGenerator generator2 = new SerialNumberGenerator();
        int serialNumber2 = generator2.generateSerialNumber();
        System.out.println("流水號(hào)2: " + serialNumber2);
    }
}

結(jié)果:

流水號(hào)1: 1
流水號(hào)2: 1

不使用單例模式存在的問題:

  • 生成重復(fù)流水號(hào):由于我們可以在不同的地方創(chuàng)建多個(gè)SerialNumberGenerator實(shí)例,每個(gè)實(shí)例都會(huì)有自己的serialNumber變量。這可能導(dǎo)致在不同的實(shí)例中生成相同的流水號(hào),從而產(chǎn)生重復(fù)的流水號(hào)。
  • 沒有共享狀態(tài):每個(gè)SerialNumberGenerator實(shí)例都會(huì)維護(hù)自己的serialNumber變量,這導(dǎo)致每個(gè)實(shí)例生成的流水號(hào)不會(huì)互相影響。這意味著如果我們想要全局唯一的流水號(hào),就需要在各個(gè)地方共享同一個(gè)SerialNumberGenerator實(shí)例,而不是創(chuàng)建多個(gè)實(shí)例。
  • 難以管理和控制:在多個(gè)地方分別創(chuàng)建和管理SerialNumberGenerator實(shí)例會(huì)增加代碼的復(fù)雜性。我們需要確保在需要流水號(hào)的每個(gè)地方都使用同一個(gè)實(shí)例,否則會(huì)出現(xiàn)上述問題。這增加了代碼維護(hù)的難度,并且容易在系統(tǒng)的不同部分中出現(xiàn)錯(cuò)誤使用的情況。
  • 重復(fù)的流水號(hào):如果多個(gè)地方都可以創(chuàng)建流水號(hào)生成器的實(shí)例,那么每個(gè)實(shí)例都有可能生成相同的流水號(hào),導(dǎo)致重復(fù)的流水號(hào)出現(xiàn)。
  • 資源浪費(fèi):如果每個(gè)部分都創(chuàng)建自己的流水號(hào)生成器實(shí)例,那么會(huì)造成資源的浪費(fèi),例如每個(gè)實(shí)例都需要獨(dú)立維護(hù)和生成流水號(hào)的狀態(tài)。
  • 一致性問題:如果多個(gè)流水號(hào)生成器實(shí)例同時(shí)生成流水號(hào),可能會(huì)導(dǎo)致不同實(shí)例生成的流水號(hào)在順序上出現(xiàn)混亂。

2.2 使用單例模式

使用單例模式的實(shí)現(xiàn)方式有多種,這里我將使用線程安全的懶漢式單例模式,具體實(shí)現(xiàn)如下:

懶漢式單例模式下面再介紹

/**
 * @author Shier
 */
public class SerialNumberGenerator1 {
    private static volatile SerialNumberGenerator instance;
    private int serialNumber;
    /**
     * 防止直接實(shí)例化SerialNumberGenerator1
     */
    private SerialNumberGenerator1() {
        serialNumber = 0;
    }
    /**
     * 獲取SerialNumberGenerator1的唯一方式
     * @return
     */
    public static SerialNumberGenerator getInstance() {
        if (instance == null) {
            synchronized (SerialNumberGenerator.class) {
                if (instance == null) {
                    instance = new SerialNumberGenerator();
                }
            }
        }
        return instance;
    }
    /**
     * 生成的流水號(hào)
     * @return
     */
    public int generateSerialNumber() {
        synchronized (SerialNumberGenerator.class) {
            serialNumber++;
            return serialNumber;
        }
    }
}

在這個(gè)實(shí)現(xiàn)中,我們使用了一個(gè)靜態(tài)變量instance來保存SerialNumberGenerator的唯一實(shí)例。getInstance()方法返回這個(gè)實(shí)例,如果它不存在,則會(huì)創(chuàng)建一個(gè)新的實(shí)例。generateSerialNumber()方法負(fù)責(zé)生成流水號(hào),使用synchronized關(guān)鍵字來確保線程安全。

現(xiàn)在,我們可以在不同的地方調(diào)用SerialNumberGenerator.getInstance().generateSerialNumber()來生成流水號(hào),并確保它們是唯一的:

/**
 * @author Shier
 */
public class Main1 {
    public static void main(String[] args) {
        int serialNumber1 = SerialNumberGenerator1.getInstance().generateSerialNumber();
        System.out.println("流水號(hào) 1: " + serialNumber1);
        int serialNumber2 = SerialNumberGenerator1.getInstance().generateSerialNumber();
        System.out.println("流水號(hào) 2: " + serialNumber2);
    }
}

通過使用單例模式,我們解決了不使用單例模式存在的問題:

  • 確保唯一性:SerialNumberGenerator的唯一實(shí)例可以在系統(tǒng)中被多次調(diào)用,但它們都會(huì)引用同一個(gè)實(shí)例,因此可以保證生成的流水號(hào)是唯一的。
  • 共享狀態(tài):通過使用單例模式,所有生成的流水號(hào)共享同一個(gè)serialNumber變量,從而避免了重復(fù)生成流水號(hào)的問題。
  • 管理和控制:由于只有一個(gè)SerialNumberGenerator實(shí)例存在于系統(tǒng)中,因此我們不必在各個(gè)地方管理和控制實(shí)例的創(chuàng)建和使用,這降低了代碼復(fù)雜性并減少了出錯(cuò)的可能性。

使用單例模式來實(shí)現(xiàn)流水號(hào)生成器類,可以確保生成的流水號(hào)是唯一的,避免資源浪費(fèi),并保證生成的流水號(hào)順序一致。所有部分都可以通過訪問流水號(hào)生成器的全局訪問點(diǎn)來獲取唯一的流水號(hào),從而簡(jiǎn)化了流水號(hào)的生成和管理。

3、單例模式實(shí)現(xiàn)方式

在上面例子當(dāng)中使用到了懶漢式單例模式,下面我們?cè)賮砜纯磫卫J降膶?shí)現(xiàn)方式:

單例模式的實(shí)現(xiàn)方式有多種,以下是幾種常見的實(shí)現(xiàn)方式:

  • 懶漢式(Lazy Initialization):在首次使用時(shí)創(chuàng)建實(shí)例。懶漢式單例模式可以延遲實(shí)例化,避免不必要的資源消耗。但需要考慮線程安全性,可以通過加鎖或使用雙重檢查鎖定等方式來確保線程安全。
  • 餓漢式(Eager Initialization):在類加載時(shí)即創(chuàng)建實(shí)例。餓漢式單例模式在類加載時(shí)就創(chuàng)建實(shí)例,因此不存在線程安全問題。但可能會(huì)提前創(chuàng)建實(shí)例,造成資源浪費(fèi)。
  • 靜態(tài)內(nèi)部類(Static Inner Class):利用類的靜態(tài)內(nèi)部類來實(shí)現(xiàn)單例模式。這種方式可以實(shí)現(xiàn)延遲加載和線程安全,且對(duì)外部類的加載不產(chǎn)生影響。
  • 枚舉(Enum):利用枚舉類型實(shí)現(xiàn)單例模式。枚舉類型的實(shí)例是線程安全的,并且保證只有一個(gè)實(shí)例存在。
  • 雙重檢查鎖定(Double-Checked Locking):結(jié)合懶漢式和加鎖機(jī)制,通過雙重檢查來實(shí)現(xiàn)延遲加載和線程安全。
  • 容器(Container):使用容器來存儲(chǔ)實(shí)例,每次獲取實(shí)例時(shí)先從容器中查找,如果不存在則創(chuàng)建并添加到容器中。這種方式適用于需要管理多個(gè)單例對(duì)象的情況。

以上是常見的幾種單例模式的實(shí)現(xiàn)方式。每種實(shí)現(xiàn)方式都有其適用的場(chǎng)景和特點(diǎn),選擇哪種方式取決于具體的需求和設(shè)計(jì)考慮。同時(shí),需要注意線程安全性和性能等因素,確保實(shí)現(xiàn)的單例模式符合要求。

下面再說說最常用的懶漢式和餓漢式單例模式實(shí)現(xiàn)

3.1 懶漢式單例模式

在第一次使用時(shí)才創(chuàng)建實(shí)例,稱為懶漢式。實(shí)現(xiàn)方式是在類內(nèi)部定義一個(gè)私有的靜態(tài)變量作為實(shí)例,然后提供一個(gè)公有的靜態(tài)方法來獲取該實(shí)例。在方法內(nèi)部判斷實(shí)例是否已經(jīng)存在,如果存在則直接返回,如果不存在則創(chuàng)建一個(gè)新的實(shí)例并返回。(我就是很懶,你不用我,我就不管你,當(dāng)你用我的時(shí)候才回去給你提供需要的東西)

public class Singleton {
    private static Singleton instance;
    // 私有構(gòu)造函數(shù)
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

在懶漢式單例模式中,我們將單例對(duì)象的實(shí)例化放在靜態(tài)方法getInstance()中。當(dāng)首次調(diào)用getInstance()時(shí),會(huì)檢查實(shí)例是否已經(jīng)存在。如果實(shí)例為null,表示還未創(chuàng)建,則進(jìn)行實(shí)例化。這種方式實(shí)現(xiàn)了延遲加載,只有在需要使用單例對(duì)象時(shí)才會(huì)創(chuàng)建它。

需要注意的是,在多線程環(huán)境下,懶漢式單例模式需要考慮線程安全性。上述代碼的實(shí)現(xiàn)并未考慮線程安全,可能會(huì)導(dǎo)致多個(gè)線程同時(shí)創(chuàng)建實(shí)例。為了解決這個(gè)問題,可以在getInstance()方法中添加線程同步機(jī)制,如使用synchronized關(guān)鍵字或者雙重檢查鎖定等方式,來確保在多線程環(huán)境下僅有一個(gè)實(shí)例被創(chuàng)建。

下面再來說多線程單例模式

3.2 餓漢式單例模式

餓漢式單例模式: 在類加載時(shí)就創(chuàng)建實(shí)例,稱為餓漢式。實(shí)現(xiàn)方式是在類內(nèi)部定義一個(gè)私有的靜態(tài)變量,并直接創(chuàng)建實(shí)例賦值給它,然后提供一個(gè)公有的靜態(tài)方法來獲取該實(shí)例。(快要餓死了,很需要吃東西,所以說菜一上來就立馬開吃,不管你三七二十四)

public class Singleton {
    private static final Singleton instance = new Singleton();
    // 私有構(gòu)造函數(shù)
    private Singleton() {
    }
    public static Singleton getInstance() {
        return instance;
    }
}

在餓漢式單例模式中,我們將單例對(duì)象的實(shí)例化放在靜態(tài)常量中,并且將構(gòu)造函數(shù)設(shè)為私有,防止外部代碼創(chuàng)建實(shí)例。在類加載時(shí),靜態(tài)常量instance就會(huì)被創(chuàng)建,并且通過公共的靜態(tài)方法getInstance()返回該實(shí)例。由于實(shí)例在類加載時(shí)就被創(chuàng)建,因此可以保證單例的唯一性。

3.3 多線程的單例模式

3.3.1 同步方法

同步方法(Synchronized Method):在getInstance()方法上使用synchronized關(guān)鍵字,確保在同一時(shí)間只有一個(gè)線程可以進(jìn)入方法,從而避免并發(fā)創(chuàng)建多個(gè)實(shí)例。這種方式簡(jiǎn)單易行,但可能存在性能問題,因?yàn)槊看握{(diào)用getInstance()都需要進(jìn)行同步。

public class Singleton {
    private static Singleton instance;
    // 私有構(gòu)造函數(shù)
    private Singleton() {
    }
    public synchronized static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

3.3.2 雙重檢查鎖定

雙重檢查鎖定(Double-Checked Locking):使用雙重檢查鎖定機(jī)制,在getInstance()方法內(nèi)使用synchronized塊,只在實(shí)例為null時(shí)才進(jìn)行同步,避免了每次調(diào)用都進(jìn)行同步的開銷。這種方式在多線程環(huán)境下能夠保證線程安全性,同時(shí)也具有較好的性能。

public class Singleton {
    private static volatile Singleton instance;
    // 私有構(gòu)造函數(shù)
    private Singleton() {
    }
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

需要注意的是,這種方式需要將instance變量聲明為volatile,以確保在多線程環(huán)境下的可見性和禁止指令重排序。

3.3.3 靜態(tài)內(nèi)部類

靜態(tài)內(nèi)部類(Static Inner Class):利用類的靜態(tài)內(nèi)部類來實(shí)現(xiàn)單例模式。靜態(tài)內(nèi)部類在首次使用時(shí)加載,且只加載一次,因此保證了線程安全性和延遲加載。

public class Singleton {
    private Singleton() {
        // 私有構(gòu)造函數(shù)
    }
    private static class SingletonHolder {
        private static final Singleton instance = new Singleton();
    }
    public static Singleton getInstance() {
        return SingletonHolder.instance;
    }
}

在多線程環(huán)境下,上述實(shí)現(xiàn)方式都能夠確保只有一個(gè)實(shí)例被創(chuàng)建,并提供線程安全的訪問。選擇哪種方式取決于具體的需求和性能要求。此外,還可以結(jié)合其他技術(shù),如使用枚舉類型實(shí)現(xiàn)單例,因?yàn)槊杜e類型的實(shí)例是線程安全且唯一的。

需要注意的是,在某些情況下,可能需要權(quán)衡線程安全和性能之間的取舍。在高并發(fā)環(huán)境下,可以考慮使用其他的并發(fā)控制方式,如使用鎖、使用線程安全的并發(fā)容器等來實(shí)現(xiàn)單例模式。

4、單例模式總結(jié)

單例模式的核心思想是將類的實(shí)例化過程控制在一個(gè)特定的范圍內(nèi),以確保只有一個(gè)實(shí)例被創(chuàng)建并且全局可訪問。這種模式在需要共享資源或避免重復(fù)創(chuàng)建相同對(duì)象的場(chǎng)景中非常有用。

以下是單例模式的一般實(shí)現(xiàn)步驟:

  • 類的構(gòu)造函數(shù)設(shè)為私有,防止外部代碼直接創(chuàng)建實(shí)例。
  • 類內(nèi)部創(chuàng)建一個(gè)私有的靜態(tài)變量來保存單例實(shí)例。
  • 提供一個(gè)公共的靜態(tài)方法來獲取單例實(shí)例,該方法負(fù)責(zé)實(shí)例的創(chuàng)建和返回。
  • 在獲取實(shí)例的方法中,需要考慮線程安全性,確保在多線程環(huán)境下只有一個(gè)實(shí)例被創(chuàng)建。

單例模式的優(yōu)點(diǎn):

  • 全局唯一性:確保只有一個(gè)實(shí)例存在,全局范圍內(nèi)可以訪問該實(shí)例。
  • 節(jié)省資源:避免重復(fù)創(chuàng)建相同的對(duì)象,節(jié)省了系統(tǒng)資源。
  • 簡(jiǎn)化調(diào)用:通過單例模式可以將實(shí)例的管理和控制集中處理,簡(jiǎn)化了代碼的使用和調(diào)用方式。

單例模式缺點(diǎn):

  • 隱藏依賴關(guān)系:?jiǎn)卫J?strong>將對(duì)象的創(chuàng)建和使用耦合在一起,使得對(duì)象之間的依賴關(guān)系難以識(shí)別和管理。其他組件或類可能會(huì)依賴單例對(duì)象,從而增加了代碼的復(fù)雜性和耦合度。
  • 可測(cè)試性降低:由于單例對(duì)象的全局性質(zhì),可能導(dǎo)致測(cè)試?yán)щy。在單元測(cè)試中,如果依賴于單例對(duì)象的方法或類,可能會(huì)難以模擬和替換實(shí)例,從而影響測(cè)試的可靠性和可維護(hù)性。
  • 線程安全問題:在多線程環(huán)境下,需要特別注意單例模式的線程安全性。如果實(shí)現(xiàn)不當(dāng),可能導(dǎo)致多個(gè)線程同時(shí)創(chuàng)建實(shí)例,從而破壞了單例的唯一性。需要額外的同步措施來確保線程安全,這可能會(huì)引入性能開銷。
  • 限制擴(kuò)展性:?jiǎn)卫J酵ǔJ?strong>通過將實(shí)例化邏輯封裝在類內(nèi)部來實(shí)現(xiàn)的,這限制了對(duì)類的擴(kuò)展性。如果需要擴(kuò)展功能或修改實(shí)例化邏輯,可能需要修改單例類的代碼,從而影響其他代碼的穩(wěn)定性和可維護(hù)性。
  • 對(duì)象生命周期管理困難:由于單例對(duì)象的生命周期長(zhǎng)于其他對(duì)象,可能會(huì)導(dǎo)致內(nèi)存泄漏問題。一旦單例對(duì)象被創(chuàng)建,它將一直存在于內(nèi)存中,直到應(yīng)用程序結(jié)束或顯式銷毀。在某些情況下,可能難以控制和管理單例對(duì)象的生命周期。

因此,應(yīng)謹(jǐn)慎使用單例模式,并根據(jù)具體需求和設(shè)計(jì)考慮選擇適當(dāng)?shù)膶?shí)現(xiàn)方式,以確保單例的正確性和適用性。

單例模式使用場(chǎng)景:

  • 全局資源共享:當(dāng)系統(tǒng)中有多個(gè)模塊或?qū)ο笮枰蚕硗粋€(gè)資源時(shí),可以使用單例模式來管理該資源,確保只有一個(gè)實(shí)例存在。例如,數(shù)據(jù)庫連接池、線程池、日志管理器等。
  • 配置信息管理:當(dāng)需要全局訪問和管理配置信息時(shí),可以使用單例模式來存儲(chǔ)和獲取配置信息。這樣可以避免重復(fù)讀取配置文件,提高性能和效率。
  • 日志記錄器:在需要記錄系統(tǒng)日志的場(chǎng)景下,使用單例模式可以確保日志記錄器的唯一性和全局訪問性。通過單例模式,可以集中管理日志記錄器的配置和輸出。
  • 緩存管理:在需要管理全局緩存的場(chǎng)景下,可以使用單例模式來實(shí)現(xiàn)緩存管理器。單例模式確保只有一個(gè)緩存管理器實(shí)例存在,避免重復(fù)創(chuàng)建和維護(hù)多個(gè)緩存實(shí)例。
  • 線程池管理:在多線程環(huán)境中,使用單例模式來管理線程池可以確保線程池的唯一性和可控性。通過單例模式,可以統(tǒng)一管理線程池的創(chuàng)建、銷毀和任務(wù)調(diào)度。
  • GUI應(yīng)用程序中的窗口管理:在圖形用戶界面(GUI)應(yīng)用程序中,使用單例模式來管理窗口對(duì)象可以確保每個(gè)窗口只有一個(gè)實(shí)例,方便對(duì)窗口進(jìn)行控制和管理。

以上就是詳解Java設(shè)計(jì)模式之單例模式的詳細(xì)內(nèi)容,更多關(guān)于Java 單例模式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Javaweb-HttpServletResponse的sendRedirectch重定向方式

    Javaweb-HttpServletResponse的sendRedirectch重定向方式

    這篇文章主要介紹了Javaweb-HttpServletResponse的sendRedirectch重定向方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • java yaml轉(zhuǎn)properties工具類方式

    java yaml轉(zhuǎn)properties工具類方式

    這篇文章主要介紹了java yaml轉(zhuǎn)properties工具類方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Spring Boot通過Junit實(shí)現(xiàn)單元測(cè)試過程解析

    Spring Boot通過Junit實(shí)現(xiàn)單元測(cè)試過程解析

    這篇文章主要介紹了Spring Boot通過Junit實(shí)現(xiàn)單元測(cè)試過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(64)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(64)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-09-09
  • SpringCloud配置刷新原理解析

    SpringCloud配置刷新原理解析

    這篇文章主要介紹了SpringCloud之配置刷新的原理,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • spring boot 實(shí)現(xiàn)阿里云視頻點(diǎn)播功能(刪除視頻)

    spring boot 實(shí)現(xiàn)阿里云視頻點(diǎn)播功能(刪除視頻)

    這篇文章主要介紹了spring boot 實(shí)現(xiàn)阿里云視頻點(diǎn)播(刪除視頻功能),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 淺談@RequestParam 參數(shù)是否必須傳的問題

    淺談@RequestParam 參數(shù)是否必須傳的問題

    這篇文章主要介紹了淺談@RequestParam 參數(shù)是否必須傳的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • springboot整合RabbitMQ中死信隊(duì)列的實(shí)現(xiàn)

    springboot整合RabbitMQ中死信隊(duì)列的實(shí)現(xiàn)

    死信是無法被消費(fèi)的消息,產(chǎn)生原因包括消息TTL過期、隊(duì)列最大長(zhǎng)度達(dá)到以及消息被拒絕且不重新排隊(duì),RabbitMQ的死信隊(duì)列機(jī)制能夠有效防止消息數(shù)據(jù)丟失,適用于訂單業(yè)務(wù)等場(chǎng)景,本文就來介紹一下
    2024-10-10
  • 基于SpringBoot多線程@Async的使用體驗(yàn)

    基于SpringBoot多線程@Async的使用體驗(yàn)

    這篇文章主要介紹了SpringBoot多線程@Async的使用體驗(yàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java中ThreadLocal的用法及原理詳解

    Java中ThreadLocal的用法及原理詳解

    這篇文章主要介紹了Java中ThreadLocal的用法及原理詳解,在并發(fā)編程中,如果一個(gè)類變量被多個(gè)線程操作,會(huì)造成線程安全問題,使用ThreadLocal可以讓每個(gè)線程擁有線程內(nèi)部的變量,防止多個(gè)線程操作一個(gè)類變量造成的線程安全問題,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

清水河县| 永胜县| 临安市| 甘洛县| 富源县| 会理县| 阿坝县| 凤凰县| 闽侯县| 北安市| 新昌县| 南雄市| 子长县| 湖口县| 哈巴河县| 阳江市| 芦山县| 登封市| 南召县| 新津县| 开平市| 中阳县| 察隅县| 芜湖市| 台安县| 乐山市| 扎兰屯市| 鄂温| 临高县| 丹棱县| 临西县| 慈利县| 绥棱县| 娄底市| 天水市| 六枝特区| 垦利县| 丹巴县| 合水县| 德州市| 乡宁县|