Java实现单例模式的几种方法

单例模式作为23中设计模式中最基础的设计模式,一般实现方式为

①私有化构造方法

②提供一个获取对象的静态方法

除此之外,实现单例模式的方法还有很多种,这篇文章主要介绍实现单例模式的几种方法。

目录

一、懒汉式单例

二、懒汉式单例优化(双重检测锁)

三、饿汉式单例

四、静态内部类实现的饿汉式单例

五、枚举实现饿汉式单例


一、懒汉式单例

java 复制代码
package design.singleton;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 懒汉式单例
 */
public class LazySingleton {

    private static LazySingleton instance;

    private LazySingleton() { }

    /**
     * 普通懒汉式单例
     */
    public static LazySingleton getInstance() {
        if (instance == null) {
            instance = new LazySingleton();
        }

        return instance;
    }

}

二、懒汉式单例优化(双重检测锁)

第一种方式的代码在多线程下存在并发问题

java 复制代码
package design.singleton;

/**
 * 双重检测锁的懒汉式单例
 */
public class LazySingleton {

    private static volatile LazySingleton instance;

    private LazySingleton() { }

    /**
     * 双重检测锁的懒汉单例
     * @return LazySingleton
     */
    public static LazySingleton getInstance() {
        if (instance == null) {
            synchronized (LazySingleton.class) {
                if (instance == null) {
                    instance = new LazySingleton();
                }
            }
        }

        return instance;
    }

}

三、饿汉式单例

java 复制代码
package design.singleton;

/**
 * 饿汉式单例
 */
public class EagerSingleton {

    private static EagerSingleton instance;

    static {
        instance = new EagerSingleton();
    }

    private EagerSingleton() { }

    public static EagerSingleton getInstance() {
        return instance;
    }

}

四、静态内部类实现的饿汉式单例

java 复制代码
package design.singleton;

/**
 * 静态内部类的懒汉式单例
 * @author heyunlin
 * @version 1.0
 */
public class InnerClassSingleton {

    private static class StaticInnerClassSingleton {
        private static StaticInnerClassSingleton singleton = new StaticInnerClassSingleton();
    }

    private InnerClassSingleton() {
        throw new RuntimeException();
    }

    public static StaticInnerClassSingleton getInstance() {
        return StaticInnerClassSingleton.singleton;
    }

}

五、枚举实现饿汉式单例

java 复制代码
package design.singleton;

/**
 * 枚举实现的单例模式
 * @author heyunlin
 * @version 1.0
 */
public enum EnumSingleton {

    Singleton;

}
相关推荐
NE_STOP3 小时前
MyBatis-配置文件解读及MyBatis为何不用编写Mapper接口的实现类
java
后端AI实验室8 小时前
用AI写代码,我差点把漏洞发上线:血泪总结的10个教训
java·ai
程序员清风10 小时前
小红书二面:Spring Boot的单例模式是如何实现的?
java·后端·面试
belhomme10 小时前
(面试题)Redis实现 IP 维度滑动窗口限流实践
java·面试
Be_Better10 小时前
学会与虚拟机对话---ASM
java
开源之眼12 小时前
《github star 加星 Taimili.com 艾米莉 》为什么Java里面,Service 层不直接返回 Result 对象?
java·后端·github
Maori31613 小时前
放弃 SDKMAN!在 Garuda Linux + Fish 环境下的优雅 Java 管理指南
java
用户9083246027314 小时前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
小王和八蛋14 小时前
DecimalFormat 与 BigDecimal
java·后端
beata14 小时前
Java基础-16:Java内置锁的四种状态及其转换机制详解-从无锁到重量级锁的进化与优化指南
java·后端