手写java设计模式之单例模式,附源码解读

在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:

1、减少类的频繁创建,减少使用频繁使用new创建实例,减少GC压力。

2、某些应用场景下,使用单例模式,保证整个系统中只会创建一个类。

单例模式分两种:饿汉模式和懒汉模式:

懒汉模式:

java 复制代码
//第一次调用时才初始化,避免内存浪费,线程安全
public class LazySingleton {
    /* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
    private static LazySingleton instance = null;

    /* 私有构造方法,防止被实例化 */
    private LazySingleton() {
    }
   //在第一次创建对象的时候需要加锁,之后就不需要了
    public static LazySingleton getInstance() {
        if(null == instance) {
            synchronized (LazySingleton.class) {
                if(null == instance) {
                    instance = new LazySingleton();
                }
            }
        }
        return instance;
    }

}

饿汉模式:

java 复制代码
public class HungerySingleton {
    //类加载时就初始化,避免了线程同步的问题,是线程安全的
    private static HungerySingleton instance = new HungerySingleton();
    private HungerySingleton(){}
    public static HungerySingleton getInstance(){
        return instance;
    }

}
相关推荐
运维@小兵4 分钟前
Spring-AI系列——Tool Calling获取当前时间
java·后端·spring
认真敲代码的小火龙7 分钟前
【JAVA项目】基于JAVA的养老院管理系统
java·开发语言·课程设计
he___H8 分钟前
滑动窗口一题
java·数据结构·算法·滑动窗口
扶苏-su9 分钟前
Java---事件处理机制
java·开发语言
雨中飘荡的记忆10 分钟前
Hutool工具库实战
java
镜花水月linyi19 分钟前
Java 线程创建的完整链路:从 Java 层 → JVM 层 → 操作系统层
java·后端·面试
zfj32125 分钟前
排查java应用内存溢出的工具和方法
java·开发语言·jvm·内存溢出
历程里程碑34 分钟前
C++ 7vector:动态数组的终极指南
java·c语言·开发语言·数据结构·c++·算法
ss27335 分钟前
高并发读场景:写时复制容器(Copy-On-Write)
java·开发语言·rpc
一人の梅雨1 小时前
淘宝商品视频接口深度解析:从视频加密解密到多端视频流重构
java·开发语言·python