Java 單例

來源:互聯網
上載者:User

標籤:eth   ret   寫法   final   blog   適用於   instance   安全   nbsp   

最近在網上看到一篇關於 Java 單例的建立問題,雖然是一個 Java 程式員,但是到現在還沒有真正的深入瞭解到 Java 的原理和機制。所以每每看到這樣能夠“真正”接觸 Java 的機會內心總是充滿了欣喜。記錄下,以後備用。

懶漢模式
public class Singlton{    private static Singleton instance;    private Singlton(){}    public static Singlton getInstance(){        if(instacne == null)            instance = new Singlton();        return instance;    }} 

 

教科書式的寫法,但是無法適用於多線程的狀態下。

餓漢模式
public class Singleton{    private static Singletion instance = new Singleton();    private Singleton(){}    public static Singleton getInstance(){        return instance;    }}

餓漢模式可以有效避免多線程的同步問題,不過使用 static 會多多少少犧牲點效能。

靜態內部類
public class Singleton{    private static class SingltonHolder{        private static final Singleton INSTANCE = new Singlton();    }    private Singleton(){}    public static final Singleton getInstance(){        return SingletonHolder.INSTANCE;    }    }

使用靜態內部類的方式,利用 ClassLoder 的機制保證了初始化的時候只有一個線程,並且兼顧了效能——Singleton 類被裝載的時候,getInstance 並不會立馬初始化,只有調用的時候才會被初始化。

枚舉
public enum Singleton{    INSTANCE;    public void method(){        //do something    }}

這種方式 Effective Java 中推薦的方式,很厲害的一種寫法。唯一的缺點就是無法繼承了吧。

小結

雖然只是創造一個單例,但是其中需要考慮的東西真的有很多。不得不感歎那些編程高手,能夠將心思縝密,利用語言的各種特性去編程創造。對於建立單例模式還是比較推薦使用靜態內部類的方式建立,不失效能的同時又兼顧安全。但是其實我更加喜歡枚舉的方式。

Java 單例

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.