java的单例设计模式

Java中的单例设计模式是一种创建对象的设计模式,用于保证在整个应用程序的生命周期中只创建一个实例对象。

在Java中,有多种方式可以实现单例设计模式,以下是最常用的几种方式:

  1. 饿汉式单例模式:在类加载时就创建实例对象。该方式保证了线程安全,但是在整个应用程序生命周期中都会存在实例对象,可能会占用较多的内存空间。
java 复制代码
public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {
    }

    public static Singleton getInstance() {
        return instance;
    }
}
  1. 懒汉式单例模式:在第一次访问时才创建实例对象。该方式在多线程环境下可能存在线程安全问题,需要进行额外的线程安全处理。
java 复制代码
public class Singleton {
    private static Singleton instance;

    private Singleton() {
    }

    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
  1. 双重检验锁单例模式:在第一次访问时才创建实例对象,并使用双重检验锁来确保线程安全。
java 复制代码
public class Singleton {
    private volatile static Singleton instance;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
  1. 静态内部类单例模式:使用静态内部类来实现单例模式,确保懒加载和线程安全。
java 复制代码
public class Singleton {
    private Singleton() {
    }

    private static class SingletonHolder {
        private static final Singleton instance = new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonHolder.instance;
    }
}

上述是Java中常用的几种单例设计模式的实现方式,根据具体的需求和场景选择合适的方式。

相关推荐
JAVA面经实录91718 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
许彰午20 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
Bat U21 小时前
JavaEE|多线程初阶(七)
java·开发语言
掌心向暖RPA自动化1 天前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
日取其半万世不竭1 天前
Minecraft Java版社区服务器搭建教程(Linux,适合新手)
java·linux·服务器
TeamDev1 天前
JxBrowser 9.0.0 版本发布啦!
java·前端·混合应用·jxbrowser·浏览器控件·跨平台渲染·原声输入
AI人工智能+电脑小能手1 天前
【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征
java·开发语言·后端·面试
geovindu1 天前
go: Strategy Pattern
开发语言·设计模式·golang·策略模式
AI人工智能+电脑小能手1 天前
【大白话说Java面试题】【Java基础篇】第25题:JDK1.8的新特性有哪些
java·开发语言·后端·面试
likerhood1 天前
SLF4J: Failed to load class “StaticLoggerBinder“ 解决
java·log4j·maven