单例模式-Java实现

简单原理介绍

单例模式保证了一个类只有一个实例,并且提供了一个访问它的全局访问点。

作用

单例模式主要是为了解决一个全局使用的类频繁地创建与销毁。之前介绍JVM的时候有提到Java的内存结构,通过类实例化的对象一般都是放在堆内存中的,频繁的创建对象会使得堆内存不够用,进而触发垃圾回收,这是会影响性能的。(简单解释下这里,这个情况就像你在家里吃零食,垃圾扔的到处都是,你妈进来收拾屋子,肯定会让你先别吃了,然后清理。回到这里,吃零食就是创建对象,所以垃圾清理时JVM中的进程会先停止工作(stop-the-world),反映到用户层面就是系统卡顿了

代码

java 复制代码
package 设计模式.单例模式;

/**
 * Created by 姜水桦 on 2023/11/25 20:26
 * 功能描述: 实例化时机
 * 饿汉式 懒汉式 加锁(避免多线程都进行实例化)
 */
public class SingletonPattern {
    public static void main(String[] args) {

    }
    static class Singleton{
        private static Singleton singleton;
//        private static Singleton singleton = new Singleton(); //饿汉式 加载时直接获取实例
        private Singleton(){}

        public synchronized static Singleton getInstance1(){ //synchronized 加锁
            if (singleton == null) {
                singleton = new Singleton(); //懒汉式 懒加载
            }
            return singleton;
        }
        public static Singleton getInstance(){ //双重检查锁
            if (singleton == null) {
                synchronized(Singleton.class){
                    if (singleton == null) {
                        singleton = new Singleton();
                    }
                }
            }
            return singleton;
        }
    }
}
相关推荐
等一场春雨21 小时前
Java设计模式 二十六 工厂模式 + 单例模式
java·单例模式·设计模式
__water3 天前
14_音乐播放服务_字典缓存避免重复加载
单例模式·c#·unity6000·字段缓存·audiosource
课堂随想3 天前
`std::make_shared` 无法直接用于单例模式,因为它需要访问构造函数,而构造函数通常是私有的
c++·单例模式
w(゚Д゚)w吓洗宝宝了3 天前
单例模式 - 单例模式的实现与应用
开发语言·javascript·单例模式
小王子10244 天前
设计模式Python版 单例模式
python·单例模式·设计模式
快乐非自愿4 天前
「全网最细 + 实战源码案例」设计模式——单例设计模式
java·单例模式·设计模式
言之。4 天前
【面试题Java】单例模式
java·开发语言·单例模式
小兜全糖(xdqt)5 天前
python中单例模式
开发语言·python·单例模式
等一场春雨5 天前
Java 设计模式 二 单例模式 (Singleton Pattern)
java·单例模式·设计模式
binbinxyz5 天前
设计模式:构建高效且可维护的软件系统的基石
单例模式·设计模式