Java中6种单例模式写法代码实例

 更新时间:2024年01月26日 09:55:56   作者:ThinkPet  
这篇文章主要介绍了Java中6种单例模式写法代码实例,某个类任何情况下只有一个实例,并提供一个全局访问点来获取该实例,Java6种单例模式有2种懒汉式,2种饿汉式,静态内部类 ,枚举类,需要的朋友可以参考下

单例模式

某个类任何情况下只有一个实例,并提供一个全局访问点来获取该实例。

Java6种单例模式:2种懒汉式,2种饿汉式 ,静态内部类 ,枚举类

懒汉式

synchronized+延迟加载

public class Singleton {
    private static Singleton instance;
    private Singleton(){}

    public static synchronized Singleton getInstance(){ //synchronized锁住getInstance方法
        if (instance==null) {  //延迟加载
            instance = new Singleton();
        }
        return instance;
    }
}

volatile+synchronized双检锁

public class Singleton {
    private volatile static Singleton instance; //volatile修饰实例
    private Singleton(){}
    public static  Singleton getInstance(){
        if (instance==null) {
            synchronized(Singleton.class){   //synchronized锁住Singleton对象
                if (instance==null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

饿汉式

类加载时触发实例化,避免了多线程同步问题 类加载时初始化静态实例

public class Singleton {
    private static Singleton instance = new Singleton(); //类加载时初始化静态实例
    private Singleton() {
    }
    public static Singleton getInstance() {
        return instance; //直接返回加载好的静态实例
    }
}

在静态代码块里初始化实例

public class Singleton {
    private static Singleton instance = null;  

    static{                             
        instance = new Singleton();  //在静态代码块里初始化实例
    }

    private Singleton() {
    }

    public static Singleton getInstance() {

        return instance;
    }
}

静态内部类方式

实现了延迟加载

调用静态内部类时,在静态内部类里初始化实例

public class Singleton {
    //定义静态内部类
    private static class InnerSingleton {
        private static final Singleton INSTANCE = new Singleton(); //初始化完成Singleton类静态实例
    }
    private Singleton() {
    }
    public static Singleton getInstance() {
        return InnerSingleton.INSTANCE; //返回静态内部类里的静态实例
    }
}

枚举类方式

既能避免多线程同步问题,又能防止反序列化重新创建对象

创建一个枚举,枚举成员为INSTANCE。使用枚举类.INSTANCE即可获取实例

package acc;
public enum Singleton {
    INSTANCE; //定义1个唯一的成员INSTANCE
    //枚举类里的公共方法
    public  void  doSomething() {
        System.out.println("r2323t23");
    }
}
public class TestSingleton {
    public static void main(String[] args) {
        //使用枚举类.INSTANCE即可获取实例
        Singleton.INSTANCE.doSomething();
    }
}

到此这篇关于Java中6种单例模式写法代码实例的文章就介绍到这了,更多相关Java单例模式写法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Maven引用自定义jar包方式

    Maven引用自定义jar包方式

    这篇文章主要介绍了Maven引用自定义jar包方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Springboot整合Activiti操作详解

    Springboot整合Activiti操作详解

    这篇文章主要给大家详细介绍了Springboot整合Activiti的操作流程,文中流程步骤和代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-07-07
  • Java实现MapStruct对象转换的示例代码

    Java实现MapStruct对象转换的示例代码

    本文主要介绍了MapStruct在Java中的对象转换使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • springboot结合mybatis-plus快速生成项目模板的方法

    springboot结合mybatis-plus快速生成项目模板的方法

    Mybatis-Plus是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生,接下来通过本文给大家分享springboot结合mybatis-plus快速生成项目模板的方法,感兴趣的朋友一起看看吧
    2021-06-06
  • SpringBoot+微信小程序实现文件上传与下载功能详解

    SpringBoot+微信小程序实现文件上传与下载功能详解

    这篇文章主要为大家介绍了SpringBoot整合微信小程序实现文件上传与下载功能,文中的实现步骤讲解详细,快跟随小编一起学习一下吧
    2022-03-03
  • Maven Assembly实战教程

    Maven Assembly实战教程

    MavenAssembly插件用于创建可分发包,如JAR、ZIP或TAR文件,通过配置pom.xml,可以生成包含所有依赖的JAR文件或自定义格式的归档文件,示例展示了如何使用默认描述符和自定义描述符创建JAR包,以及在多模块项目中使用Assembly插件
    2024-12-12
  • java 定时器Timer和TimerTask的使用详解(执行和暂停)

    java 定时器Timer和TimerTask的使用详解(执行和暂停)

    这篇文章主要介绍了java 定时器Timer和TimerTask的使用详解(执行和暂停),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • 使用Cloud Studio构建SpringSecurity权限框架(腾讯云 Cloud Studio 实战训练营)

    使用Cloud Studio构建SpringSecurity权限框架(腾讯云 Cloud Studio 实战训练

    随着云计算技术的成熟和普及,传统编程能力和资源以云服务的形式开放出来,从中间件、数据库等水平能力服务组件到人脸识别、鉴权服务等基本业务服务组件很容易的在云端获取,本文介绍使用Cloud Studio构建SpringSecurity权限框架的相关知识,感兴趣的朋友一起看看吧
    2023-08-08
  • SpringBoot使用jasypt实现数据库信息脱敏的方法详解

    SpringBoot使用jasypt实现数据库信息脱敏的方法详解

    这篇文章主要介绍了SpringBoot使用jasypt实现数据库信息的脱敏,以此来保护数据库的用户名username和密码password(容易上手,详细),文中有详细的图文讲解和代码示例供大家参考,需要的朋友可以参考下
    2024-06-06
  • FactoryBean BeanFactory方法使用示例详解讲解

    FactoryBean BeanFactory方法使用示例详解讲解

    这篇文章主要为大家介绍了FactoryBean BeanFactory方法使用示例详解讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12

最新评论