单例设计模式

第一种可用单例模式设计

当第一次加载Singleton类时会初始化single,资源利用率高,效率高。
第一次加载时慢,在高并发的情况下有一定的缺陷。

public class Singleton {

private static Singleton single = null;

private Singleton() {
    // TODO Auto-generated constructor stub
}

public static Singleton getInstance() {

    if (single == null) {

        synchronized (Singleton.class) {
            if (single == null) {
                single = new Singleton();
            }
        }
    }

    return single;

    }
}

第二种可用单例模式设计

当第一次加载Singleton类时不会初始化single。
可以确保线程安全,也可以保证单例对象唯一性,同时延迟了单例的实例化。

public class Singleton {

private Singleton() {
    // TODO Auto-generated constructor stub
}

public static Singleton getInstance() {

    return SingletonHolder.single;

}

private static class SingletonHolder {

    private static final Singleton single = new Singleton();
}    
    }
}