单例实现java

所有单例模式需要处理得问题都是:

将构造函数私有化

通过静态方法获取一个唯一实例

保证线程安全

防止反序列化造成的新实例等。

推荐使用:静态内部类,DCL

静态内部类实现,线程安全

public class SingletonDemo {

    private static class SingletonHolder{

        private static SingletonDemo instance=new SingletonDemo();

    }

    private SingletonDemo(){

        System.out.println("Singleton has loaded");

    }

    public static SingletonDemo getInstance(){

        return SingletonHolder.instance;

    }

protected Object readResolve() {  //解决反序列化时产生多个对象

    System.out.println("调用了readResolve方法");

    return InnerClass.singletonStaticInnerSerialize;

}

}

DCL双重所机制

public class SingletonDemo {

    private static volatile SingletonDemo instance;

    private SingletonDemo(){

        System.out.println("Singleton has loaded");

    }

    public static SingletonDemo getInstance(){

        if(instance==null){

            synchronized (SingletonDemo.class){

                if(instance==null){

                    instance=new SingletonDemo();

                }

            }

        }

        return instance;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容