黑马程序员技术交流社区

标题: Java中的单例举例 [打印本页]

作者: Curvat    时间: 2016-6-1 10:29
标题: Java中的单例举例
本帖最后由 Curvat 于 2016-6-1 10:54 编辑

第一种(懒汉,线程不安全)public class Singleton {
    private static Singleton instance;
    private Singleton (){}
    public static Singleton getInstance() {
        if(instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
第二种(懒汉,线程安全)
pulic class Singleton {
    private static Singleton instance;
    private Singleton () {}
    public static synchronized Singleton getInstace() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
第三种(饿汉)
public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton (){}
    public static Singleton getInstance() {
        return instance;
    }
第四种(饿汉,变种)
public class Singleton {
    private Singleton instance = null;
    static {
        instance = new Singleton();
    }
    private Singleton () {};
    public static Singleton getInstance() {
        return this.instance;
    }
}
第五种(静态内部类)
public class Singleton {
    private static class SingletonHolder {
        private static final Singleton INSTANCE = null;
    }
    private Singleton (){}
    public static final Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
第六种(枚举)
public enum Singleton {
    INSTANCE;
    public void whateverMethod() {
    }
}
第七中(双重校验锁)
public class Singleton {
    private volatile static Singleton singleton;
    private Singleton (){}
    public static Singleton getSingleton() {
        if(singleton == null) {
            synchronized (Singleton.class) {
                if(singleton == null) {
                    singleton = new Singleton();
               }
            }
        }
        return singleton;
    }
}


作者: Curvat    时间: 2016-6-1 10:33
本帖最后由 Curvat 于 2016-6-1 10:51 编辑

第一种(懒汉,线程不安全)
public class Singleton {   
    private static Singleton instance;
    private Singleton (){}    public static Singleton getInstance() {
        if(instance == null) {
            instance = new Singleton();
        }
        return instance;    }
}
第二种(懒汉,线程安全)
pulic class Singleton {
    private static Singleton instance;
    private Singleton () {}
    public static synchronized Singleton getInstace() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
第三种(饿汉)
public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton (){}
    public static Singleton getInstance() {
        return instance;
    }
}第四种(饿汉,变种)
public class Singleton {   
private Singleton instance = null;
    static {
        instance = new Singleton();
    }   
private Singleton () {};   
public static Singleton getInstance() {
        return this.instance;
    }
}
第五种(静态内部类)
public class Singleton {
    private static class SingletonHolder {
        private static final Singleton INSTANCE = null;
    }
    private Singleton (){}
    public static final Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
第六种(枚举)
public enum Singleton {
    INSTANCE;    public void whateverMethod() {
    }
}
第七中(双重校验锁)
public class Singleton {
    private volatile static Singleton singleton;
    private Singleton (){}
    public static Singleton getSingleton() {
        if(singleton == null) {
            synchronized (Singleton.class) {
                if(singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

作者: qq2233751026    时间: 2016-6-1 10:49
这么乱 有啥用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2