JAVA单例模式

单例模式有两种设计:

  1. 延迟加载(懒汉式)
    • 私有构造方法
    • 创建本类对象,但不初始化
    • 创建静态方法进行初始化对象并返回
  2. 立即加载(饿汉式)
    • 私有构造方法
    • 创建本类的对象并初始化(私有的)
    • 创建静态方法获取本类对象

举例1.

/**
 * 延迟加载(懒汉式)
 *  1.私有构造方法
 *  2.创建本类对象,但不初始化
 *  3.创建静态方法进行初始化对象并返回
 *
 *  优点:
 *      使用到类的对象才会加载,不消耗内存
 *  缺点:
 *      可能会出现线程安全问题,但是可以使用同步代码块消除这个安全问题
 *
 */

public class SingleExample {

    private SingleExample(){}

    // 创建本类对象,不初始化
    private  static SingleExample instance ;

    private static  SingleExample getInstance(){
        if (instance == null) {
            // 同步代码块
            synchronized (SingleExample.class) {
                if (instance == null) {
                    instance = new SingleExample();
                }
            }
        }
        return instance;
    }

    public static void main(String[] args) {
        System.out.println("1." + SingleExample.getInstance());
        System.out.println("2." + SingleExample.getInstance());
        System.out.println("3." + SingleExample.getInstance());// 均是同一个对象,在同一个内存中
    }

}

举例2.

/**
 * 立即加载(饿汉式)
 *  1.私有构造方法
 *  2.创建本类的对象并初始化(私有的)
 *  3.创建静态方法获取本类对象
 *
 *  优点:
 *      保证的线程的安全,没有线程安全问题
 *  缺点:
 *      使用类就会加载,比较消耗内存
 */
public class ImmediateSingle {

    private ImmediateSingle(){}

    private static ImmediateSingle instance = new ImmediateSingle();

    public static ImmediateSingle getInstance(){
        return instance;
    }
}
原文地址:https://www.cnblogs.com/xiao-apple36/p/13097847.html