天天看點

單例模式以及例子

單例模式

一個類隻能建立一個對象

餓漢式 – 可能會浪費空間,并發效率高

class Singleton{
    private static Singleton o = new Singleton();
    private Singleton(){}
    public static Singleton getSingleton(){
        return o;
    }
}
           

懶漢式–可能會浪費空間,并發效率低

class Singleton{
    private static Singleton o = null;
    private Singleton(){}
    public static synchronized Singleton getSingleton(){
        if(o == null){
            o = new Singleton();
        }
        return o;
    }
}
           

雙重校驗鎖–在保證線程安全的情況下,盡可能的提高并發效率

class Singleton{
    private static Singleton o = null;
    private Singleton(){}
    public static Singleton getSingleton(){
        if(o == null){
            synchronized(Object.class) {
                if(o==null){
                    o = new Singleton();
                }
            }
        }
        return o;
    }
}
           

懶加載–靜态内部類實作

class Singleton{
    private Singleton(){}
    private static class innerClass{
        static Singleton singleton = new Singleton();
    }
    public static Singleton getSingleton(){
        return innerClass.singleton;
    }
}
           

繼續閱讀