91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用java代碼實現高性能單例模式

發布時間:2022-05-23 15:48:32 來源:億速云 閱讀:171 作者:iii 欄目:大數據

這篇“如何用java代碼實現高性能單例模式”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“如何用java代碼實現高性能單例模式”文章吧。

單例是指:無論你創建了多少個引用,在堆中僅僅只有一個實例。

例如, 

Person p1 = ... ; 
Person p1 = ...; 

在單例模式下,必須保證p1==p2。因為單例要保證p1和p2兩個引用指向的是同一個實例,即引用地址是相同的。

單例模式的寫法也有很多種:線程不安全的懶漢式、線程安全的懶漢式、線程安全的餓漢式、登記式等等。但從實踐的角度來看,用的最多的也就只有兩種方式:枚舉式和雙重檢查式。

其中,枚舉式的單例模式只需要一行代碼,堪稱居家旅行必備神器~如下所示。


public enum Singleton{ INSTANCE; }


OK,寫完了,不信來測試一下。

public enum Singleton{
    INSTANCE;

    public void method(){
        System.out.println("業務方法...");
    }
}

class Test{
    public static void main(String[] args) {
        Singleton ins1 = Singleton.INSTANCE;
        Singleton ins2 = Singleton.INSTANCE;
        System.out.println(ins1 == ins2);
        ins1.method();
    }
}

運行結果:

true

業務方法...

原理:枚舉類型 是天然的單例。

除了以上枚舉式的單例模式以外,另一種推薦的單例寫法就是 雙重檢查式單例,源碼如下:

public class SingletonD {
    private volatile static SingletonD instance = null;
    private SingletonD() {
    }
    public static SingletonD getInstance() {
        if (instance == null) {
            synchronized (SingletonD.class) {
                if (instance == null)
                    instance = new SingletonD();
            }
        }
        return instance;
    }
}

對以上源碼進行兩點說明:

  1. 源碼中有兩個if判斷,第一個if是為了減少if代碼塊的執行次數(如果instance不為null,就不需要再執行if代碼塊),從而提升性能;第二個if是在加鎖后的判斷,目的是為了保證instance只會被new一次。這種寫法有兩個if,因此稱為雙重加鎖。

  2. instance = new SingletonD()不是一個原子性操作,可能會被JVM重排序,從而造成線程安全問題。因此需要給成員變量instance加上volatile關鍵字,用于防止重排序的發生。

以上就是關于“如何用java代碼實現高性能單例模式”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

渝北区| 嘉善县| 临漳县| 平南县| 化州市| 天镇县| 陕西省| 雷波县| 平潭县| 凤台县| 黄骅市| 东莞市| 平山县| 平顶山市| 太谷县| 南丹县| 辽阳县| 红原县| 温州市| 商水县| 阳西县| 府谷县| 德令哈市| 津市市| 铜川市| 收藏| 石景山区| 太原市| 阿尔山市| 吴江市| 仙居县| 牡丹江市| 睢宁县| 石城县| 随州市| 德化县| 林甸县| 山东| 天等县| 清徐县| 遂川县|