1. 程式人生 > >Java單例模式的三種實現方式

Java單例模式的三種實現方式

單例模式之餓漢式

在類載入時就初始化一個類物件,使用靜態載入,但是在類載入時就例項化物件,單例物件較大的時候會影響系統載入速度。

public class Singleton {

    private Singleton() {
        System.out.println("This is constructor.");
    }

    private static Singleton instance = new Singleton();

    public static Singleton getInstance () {
        return instance;
    }

    public
static void main(String[] args) { Singleton.getInstance(); } }

延遲載入的singleton

只有在訪問到單例物件的時候才去檢查和例項化單例物件,滿足延遲載入,但多執行緒訪問時需要加執行緒同步,影響訪問效率


public class LazySingleton {

    private LazySingleton() {}
    private static LazySingleton instance ;

    public synchronized static LazySingleton getInstance
() { //對於多執行緒訪問的需加synchronized if (instance == null) { instance = new LazySingleton(); } return instance; } }

使用靜態內部類來作為singleton的容器

既能延遲載入,又能保證執行緒安全


public class StaticSingleton {

    private StaticSingleton() {}
    private static class SingletonHolder
{
//私有內部類在StaticSingleton 載入時,不初始化 private static StaticSingleton instance = new StaticSingleton(); } public static StaticSingleton getInstance () { return SingletonHolder.instance; } }