首页 > 编程语言 >Java单例模式

Java单例模式

时间:2023-08-02 12:11:46浏览次数:36  
标签:singletonDemo Java getInstance private static 模式 单例 new SingletonDemo

单例模式线程安全的四种创建方式

静态代码块,静态内部类,双重检锁,枚举模式

代码展示

静态代码块

private static final SingletonDemo SINGLETON_DEMO;
static {
    SINGLETON_DEMO = new SingletonDemo();
}

private SingletonDemo(){

}
public static SingletonDemo getInstance(){
    return  SINGLETON_DEMO ;
}

静态内部类

private singletonDemo(){
}

public static singletonDemo getInstance(){
    return Inner.singletonDemo;
}

public static class Inner {
    private static singletonDemo singletonDemo = new singletonDemo() ;
}

双重检锁

private static volatile SingletonDemo singletonDemo = null ;
private SingletonDemo(){
}

public static SingletonDemo getInstance(){
    try {
        Thread.sleep(5000);
    }catch(InterruptedException e) {
        throw new RuntimeException(e);
    }
    //双重校验锁  保证线程安全
    if(singletonDemo==null){
        synchronized(SingletonDemo.class){
            if(singletonDemo==null){
                singletonDemo = new SingletonDemo();
            }
        }
    }
    return singletonDemo ;
}

枚举模式

private SingletonDemo(){
}

public static SingletonDemo getInstance(){
    return InnerEnum.INNER_ENUM.getInstance();
}
private static enum InnerEnum {
    INNER_ENUM;

    private final SingletonDemo singletonDemo ;

    private InnerEnum(){
        singletonDemo = new SingletonDemo() ;
    }
    private SingletonDemo getInstance(){
         return singletonDemo;
    }
}

标签:singletonDemo,Java,getInstance,private,static,模式,单例,new,SingletonDemo
From: https://www.cnblogs.com/freedomlog/p/17600327.html

相关文章

  • JavaScript学习 -- SM4算法应用实例
    SM4算法,也被称为国密算法,是中国公布的一种高效且安全的对称加密算法。在JavaScript中,我们可以通过使用CryptoJS库来实现SM4算法的加密和解密。本篇博客将为您介绍如何在JavaScript中使用SM4算法,并提供一个实际的案例。首先,确保您已经引入了CryptoJS库。以下是一个使用SM4算法进行加......
  • 基于B/S模式的电子病历系统,覆盖电子病历模板制作到管理使用的整个流程
    基于B/S模式的电子病历系统,覆盖电子病历模板制作到管理使用的整个流程电子病历EMR(ElectronicMedicalRecord)也称为计算机化的病历或基于计算机的病人记录CMR(ComputerBasedMdicalRecord),它是用电子设备保存、管理和传输数字化的病人医疗记录,是取代手写纸张的病历。对电子病历一致......
  • Java设计模式--装饰器模式
    Java设计模式--装饰器模式一、问题背景在项目场景中,有这样一个需求,需要对录入的加班进行规则校验,包括但不限于,对加班的录入时间进行检查,对录入的加班类型进行检查,对加班日期的班次进行对比检查,对潜入系统的时长进行对比检查等等。具体来说,就是对一条加班记录,进行多种规则的检查......
  • java 查看class文件的jdk版本的两种方式(编译版本)
    1.情景展示有时候我们需要知道jar包里面class文件的jdk编译版本,来排查错误。以上图为例,如何实现?2.具体分析将其中一个class文件解压出来,然后查看大致的jdk版本号。3.解决方案使用解压工具打开gridreport.jar,将Report.class解压到桌面。方式一:使用文本编辑工具EditPlus......
  • Java空指针异常
    java是没有指针的,java的指针是指java的引用,空指针即为空引用,空指针异常即为【引用本身为空,却调用了方法】除去静态变量与静态方法,成员变量与方法都是属于对象的,只有在对象中才存在相对应的成员变量与方法,然后再通过对象去调用这些成员变量和方法......
  • Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: int
    执行mybatis的mapper方法时,报错了这个错。通过网上查找,发现了是JDK版本和oracle版本不一致导致的。(我直接从JDK1.8换成JDK11就可以了) 以下内容转自:FailedtoobtainJDBCConnection;nestedexceptionisjava.sql.SQLException:oracle.jdbc.OracleDriver_小沈同学_的博客-CS......
  • Java面试题 P40:数据库篇:MySql篇-用过分库分表吗?
            ......
  • java双环境安装
    0x00 前言在此之前已经有jdk1.8了,需要再配一个jdk17参考链接:https://www.jb51.net/article/278326.htm下载链接: https://www.oracle.com/java/technologies/downloads/#java17  0x01 安装忘截图了,无脑下一步,指定路径跟之前的jdk在同一目录下就行  0x02 环境变......
  • Java面试题 P37:数据库篇:MySql篇-事务-事务中的隔离性是如何保证的呢?
    锁:排它锁(如一个事务获取了一个数据行的排它锁,其他事务就不能再获取该行的其他锁),insertupdatedelete都是用了排它锁mvcc:多版本并发控制。你解释一下mvcc?           ......
  • Java学习-3
    今天做了一个Java罗马数字转实际数字的题目,学习到了map的基本用法,以及调用时需要注意的一些事情。同时期间也学习了println的输出方法。classSolution{publicintromanToInt(Strings){Map<String,Integer>map=newHashMap<>();map.put("I",1);......