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;

}
相关推荐
Cc.Y1 小时前
Java零基础入门:字符串深度掌握——从基础API到StringBuilder性能优化
java·开发语言·性能优化
java资料站5 小时前
十一、评估测试
开发语言·人工智能·python
左手の明天6 小时前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
shuoshuohaohao6 小时前
MyBatis 小知识点
java·spring·mybatis
海上小飞龙6 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
朝朝辞暮i6 小时前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
狗凯之家源码网6 小时前
淘客口令落地页生成器 PHP 版深度评测
开发语言·php
画绛集美术6 小时前
本地化部署LLM用于美术史问答:一间美术教室的实践记录
开发语言·php
谢亮_vipxieliang7 小时前
泛型擦除、通配符与 PECS 一次讲透
java·面试
八解毒剂7 小时前
【计组】中央处理器CPU
java·开发语言·计算机组成原理