手写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;
    }

}
相关推荐
一嘴一个橘子13 分钟前
mybatis - 动态语句、批量注册mapper、分页插件
java
组合缺一14 分钟前
Json Dom 怎么玩转?
java·json·dom·snack4
危险、31 分钟前
一套提升 Spring Boot 项目的高并发、高可用能力的 Cursor 专用提示词
java·spring boot·提示词
kaico201835 分钟前
JDK11新特性
java
钊兵35 分钟前
java实现GeoJSON地理信息对经纬度点的匹配
java·开发语言
jiayong2340 分钟前
Tomcat性能优化面试题
java·性能优化·tomcat
秋刀鱼程序编程44 分钟前
Java基础入门(五)----面向对象(上)
java·开发语言
纪莫1 小时前
技术面:MySQL篇(InnoDB的锁机制)
java·数据库·java面试⑧股
Remember_9931 小时前
【LeetCode精选算法】滑动窗口专题二
java·开发语言·数据结构·算法·leetcode
Filotimo_1 小时前
在java开发中,cron表达式概念
java·开发语言·数据库