1.概念

单例模式是指确保某一个类只有一个实例,并且自行实例化并向整个系统提供这个实例。

2.实现方式

2.1 普通实现方式:分为饿汉式和懒汉式。

2.1.1饿汉式:

特点:

1.随着类加载的同时创建对象

2.线程安全

1.类中创建静态的私有的本类对象,并实例化,防止外界访问,

2.将构造方法私有,防止外界访问,

3.为外界提供公共的静态方法,方便访问类中实例。

普通标准代码:

public class Student {

    private static Student s = new Student();
    private Student(){

    }
    public static Student getStudent(){
        return s;
    }

}

Java中的单例模式体现:Runtime类

2.1.2懒汉式:

特点:

1.使用时创建对象

2.线程不安全

1.类中创建静态的私有的本类对象,

2.将构造方法私有,防止外界访问,

3.为外界提供公共的静态方法,外界调用该方法时判断静态变量是否为null,为null, 实例化,并返回值;不为null,直接返回值。

public class Teacher {

    private static Teacher teacher = null;
    private Teacher(){
        //Runtime.getRuntime();
    }

    public static synchronized Teacher getTeacher(){
        if(teacher == null)
            teacher = new Teacher();
        return teacher;
    }   

}

由于懒汉式会有线程安全的问题,所以开发过程中一般用饿汉式,不推荐懒汉式

2.2 进阶实现方式:DCL方式和静态内部类方式

2.2.1 Double CheckLock方式

2.2.2 静态内部类方式

DCL方式虽然在一定程度上解决了资源消耗、多余的同步、线程安全等问题,但还是会有双重检查锁定失效的问题。而静态内部类方式,当第一次加载Singleton类时,并不会初始化sInstance,只有在第一次调用Singleton的getInstance()方法时才会使sInstance初始化。

public class Singleton {
    private Singleton(){}
    public static Singleton getInstance(){
        return SingletonHolder.sInstance;
    }

    private static class SingletonHolder{
        private  static final Singleton sInstance = new Singleton();
    }
}

results matching ""

    No results matching ""