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;

}
相关推荐
冷雨夜中漫步43 分钟前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
JH30732 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
m0_736919103 小时前
C++代码风格检查工具
开发语言·c++·算法
Coder_Boy_3 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_944934733 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
invicinble3 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟3 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖3 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
2301_763472464 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
TechWJ5 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto