jdk中单例模式

饿汉式单例是线程安全的,类加载的时候创建实例

懒汉式单例是线程不安全的,

双检锁懒汉单例需要加volatile关键词,防止指令重排导致获取实例未赋值。


private static volatile Singleton INSTANCE = null;

public static Singleton getInstance(){

if (INSTANCE==null){

        synchronized(Singleton.class){

            if (INSTANCE==null){

                    INSTANCE=new Singleton();

}

}

}

    return INSTANCE;

}


内部静态类懒汉式

class Singleton {

private Singleton(){}

private static class Holder{

    static Singleton INSTANCE = new Singleton();

}

public static Singleton getInstance(){

retrun Holder.INSTANCE;

}

}


jdk中

Runtime类 饿汉式单例

System类 cons用双检锁单例

Collections类 Empty集合用内部类单例模式

重写readResolve()方法解决反序列化破坏单例创建

private Object readResolve(){

    return Empty_NAVIGABLE_SET;

}

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

推荐阅读更多精彩内容