JAVA-(设置模式)2.单例

有时候,我们希望JVM中只有一个类的对象。
实现单例(Singleton)有两种方式。
1.饿汉式

public class Singleton {
    //饿汉式(声明实例引用即实例化)类装载的时候实例化存放在方法区内(不存在线程并发)
    private static Singleton singleton = new Singleton();
    //构造方法私有
    private void Singleton (){
    }
    //提供访问点
    public static Singleton getSingleton(){
        return singleton;
    }
}

饿汉式不存在并发的情况,但是在类加载的时候即申请内存实例化(对于大对象来说还是比较消耗内存)
2.懒汉式

public class Singleton {
    //懒汉式(声明实例引用不实例化,第一次调用方法时,实例化)
    //对于创建实例代价大,且不定会使用时,使用懒加载模式可以减少开销
    //缺点:在单线程下能保证只有一个实例,多线程下有创建多个实例的风险
    private static Singleton singleton = null;
    private void Singleton(){
    }
    public static Singleton getSingleton(){
        /*这种方式存在并发的情况
        if(singleton!=null){    
                
        }else{
            singleton = new Singleton();
        }
        return singleton;
                */
        //只有调用getSingleton时才会装载内部类,才会创建实例(不存在线程并发)
        return InnerClass.INSTANCE;
    }
    private static class InnerClass{
        private static final Singleton INSTANCE = new Singleton();
    }

}

你可能感兴趣的:(JAVA-(设置模式)2.单例)