单例实现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;

    }

}

你可能感兴趣的:(单例实现java)