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;

}
相关推荐
a1117767 小时前
中文优先的企业 RAG 知识库 开源项目
开发语言·开源·kotlin
破z晓7 小时前
javascript 导出excel表
开发语言·javascript·excel
西门啐血8 小时前
上位机开发之假装有设备,使用 C# 模拟串口设备
开发语言·mongodb·c#
QQ_21696290968 小时前
Spring Boot 养老院管理系统:从入住、护理到费用结算的全流程实现(源码可领)
java·spring boot·后端
cxoptics8 小时前
冰洲石分束器设计与应用
java
ck-joker9 小时前
M1 Pro跑LLM实测:Ollama+LangChain4j零成本本地大模型开发,比云端API快在哪?
java·语言模型
阿米亚波9 小时前
【C++ STL】std::unordered_multiset
开发语言·数据结构·c++·笔记·stl
丙氨酸長鏈9 小时前
[Bukkit插件开发]手持发射器箭矢机枪 教学文档 面向Python/C#开发者入门Java与Bukkit API
java·python·c#
Nontee9 小时前
设计模式:模板方法与策略,从“每个字都认识“到能说清它们在干嘛
java·数据库·设计模式
我是唐青枫9 小时前
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
java·开发语言