美文网首页
单列模式的多种实现方式

单列模式的多种实现方式

作者: DataSource | 来源:发表于2019-03-20 16:27 被阅读0次

懒汉模式

@ThreadSafe
public class SingletonExample1 {
    //私有的构造函数
    private SingletonExample1() {

    }
    //单列对象
    private static SingletonExample1 instance = null;

    //静态的工厂方法
    public static  synchronized SingletonExample1 getInstance() {
        if (instance == null) {
            instance = new SingletonExample1();
        }
        return instance;
    }
}

饿汉模式

@ThreadSafe
public class SingletonExample2 {
    //私有的构造函数
    private SingletonExample2() {

    }
    //单列对象
    private static SingletonExample2 instance = new SingletonExample2();

    //静态的工厂方法
    public static SingletonExample2 getInstance() {
        return instance;
    }
}

双重同步锁单例模式

@ThreadSafe
public class SingletonExample4 {
    //私有的构造函数
    private SingletonExample4() {
    }
    //单列对象
    private static SingletonExample4 instance = null;

    //静态的工厂方法
    public static  SingletonExample4 getInstance() {
        if (instance == null) {
            synchronized (SingletonExample4.class){
                if(instance==null){
                    instance = new SingletonExample4();
                }
            }
        }
        return instance;
    }
}

volatile+双重同步锁单例模式

@ThreadSafe
public class SingletonExample5 {

    //私有的构造函数
    private SingletonExample5() {

    }
    //volatile+双重同步锁单例模式》  关键字可以防止cup指令重排
    //单列对象
    private volatile static SingletonExample5 instance = null;

    //静态的工厂方法
    public static SingletonExample5 getInstance() {
        if (instance == null) {
            synchronized (SingletonExample5.class){
                if(instance==null){
                    instance = new SingletonExample5();
                }
            }
        }
        return instance;
    }
}

静态的工厂方法

@ThreadSafe
public class SingletonExample6 {
    //私有的构造函数
    private SingletonExample6() {

    }
    //单列对象
    private static SingletonExample6 instance =null;

    static {
        instance = new SingletonExample6();
    }

    //静态的工厂方法
    public static SingletonExample6 getInstance() {
        return instance;
    }

    public static void main(String[] args) {
        System.out.println(getInstance().hashCode());
        System.out.println(getInstance().hashCode());
    }
}

枚举

@ThreadSafe
public class SingletonExample7 {

    private SingletonExample7() {
    }

    public static SingletonExample7 getInstance() {
        return Singleton.INSTANCE.getInstance();
    }

    private enum Singleton {

        INSTANCE;

        private SingletonExample7 singleton;

        //JVM保证这个方法只被调用一次
        Singleton() {
            singleton = new SingletonExample7();
        }

        public SingletonExample7 getInstance() {
            return singleton;
        }
    }
}

相关文章

  • 单列模式的多种实现方式

    懒汉模式 饿汉模式 双重同步锁单例模式 volatile+双重同步锁单例模式 静态的工厂方法 枚举

  • 单例模式的多种实现优劣

    Talk is cheap, show me the code. 常用多种单列模式,如下: public clas...

  • 单例模式(Singleton)- 通俗易懂的设计模式解析

    单例模式的实现方式单例模式的实现方式有多种,根据需求场景,可分为2大类、6种实现方式。具体如下: a. 初始化单例...

  • Python实现单列模式

    1. __ new __ 执行结果 1010{'a': 10} 2. 共享属性 执行结果 1010{'a': 10...

  • 设计模式-单例模式【实现、序列化、反射】

    设计模式-单例模式【实现、序列化、反射】 [toc] 1. 实现 单例模式的实现有很多种,分类方式也不一而足,比如...

  • 几种常见的CSS布局

    本文概要 本文将介绍如下几种常见的布局: 其中实现三栏布局有多种方式,本文着重介绍圣杯布局和双飞翼布局。 一、单列...

  • 《每天一点Java知识》设计模式——策略模式

    策略模式的概念图 策略模式源来 在生活中,实现一个目标有多种方式方法,也就是有多种策略。可以用if-else来简单...

  • Java单例模式

    单例模式有很多种模式,饿汉,懒汉模式。项目中的单例需要处理多线程,所以选择以下两种实现方式。 关于volatile...

  • 单列模式

    单列模式必须用到__new__方法 一定要有返回值 一定要写上超级父类 然后加上cls

  • 单列模式

    1、什么是单列模式 单列模式(Singleton)保证一个类仅有一个实例,并提供一个访问的全局访问点,这种类型的设...

网友评论

      本文标题:单列模式的多种实现方式

      本文链接:https://www.haomeiwen.com/subject/sjktvqtx.html