java线程安全的单例模式

    java有多种设计模式,单例模式是我们平时开发中最常用到的一种设计模式,它确保一个类只能创建一个实例,并提供一种全局访问这个实例的方式。

    单例模式实现方式有很多,本文主要讨论的是线程安全的单例模式,因为项目中用的也是线程安全的单例模式。

1.静态成员变量

  通过静态常量实现单例,利用jvm本身来控制线程安全(JVM保证静态变量在类加载时被初始化,只会被初始化一次),但该方法实现单例的缺点是:它是饿汉式,类加载时单例就创建了,不能懒加载。

package com.newbie.singleton;

/**
 * 静态变量 JVM保证静态成员只会被初始化一次
 * 但无法懒加载
 */
public class Singleton1 {
    // 静态变量
    private static Singleton1 singleton = new Singleton1();
    // 外部获取单例的方法
    public static Singleton1 getSingleton(){
        return singleton;
    }
    // 将构造方法私有化,不让外部调用
    private Singleton1(){}
}

2.静态内部类

    通过静态内部类实现单例,利用jvm本身来控制线程安全,并且它是懒汉式,在调用时进行懒加载(利用jvm对静态内部类加载实现懒加载),在实际开发中推荐使用。

package com.newbie.singleton;

/**
 * 静态内部类实现单例 利用jvm对静态内部类加载时 内部类静态变量只会被初始化一次
 * 懒加载
 */
public class Singleton2 {
    

你可能感兴趣的:(java,java,单例模式,开发语言)