1. 什么是单例模式
    因进程需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。

  2. 单例模式的特点
    1、单例模式只能有一个实例。
    2、单例类必须创建自己的唯一实例
    3、单例类必须向其他对象提供这一实例。

  3. 单例模式的实现

    1. 懒汉式(线程不安全)
    public class SingletonDemo {private static SingletonDemo instance;private SingletonDemo(){}public static SingletonDemo getInstance(){if(instance==null){instance=new SingletonDemo();}return instance;}
    }
    
    1. 懒汉式,线程安全
    public class SingletonDemo {private static SingletonDemo instance;private SingletonDemo(){}public static synchronized SingletonDemo getInstance(){if(instance==null){instance=new SingletonDemo();}return instance;}
    }
    

    这种模式在多线程的时候效率比较低,生产上不推荐.

    1. 饿汉式,线程安全
    public class SingletonDemo {private static SingletonDemo instance=new SingletonDemo();private SingletonDemo(){}public static SingletonDemo getInstance(){return instance;}
    }
    
    1. 静态内部类(线程安全)
    public class SingletonDemo {private static class SingletonHolder{private static SingletonDemo instance=new SingletonDemo();}private SingletonDemo(){System.out.println("Singleton has loaded");}public static SingletonDemo getInstance(){return SingletonHolder.instance;}
    }
    
    1. 枚举方法(线程安全)
    enum SingletonDemo{INSTANCE;public void otherMethods(){System.out.println("Something");}
    }
    
    1. 双重校验(线程安全)
    public class SingletonDemo {private static SingletonDemo instance;private SingletonDemo(){System.out.println("Singleton has loaded");}public static SingletonDemo getInstance(){if(instance==null){synchronized (SingletonDemo.class){if(instance==null){instance=new SingletonDemo();}}}return instance;}
    }
    

java单例模式几种常见实现方式相关推荐

  1. Java swing五种常见的布局方式【转载】

    Java swing五种常见的布局方式 1. 边界布局(BorderLayout) 2.流式布局(FlowLayout) 3.网格布局(GridLayout) 4.盒子布局(BoxLaYout) 5. ...

  2. MySQL 异常:这一篇就够了,MySQL 抛出异常的几种常见解决方式小结

    Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connectio ...

  3. java布尔类型比较器_浅谈Java中几种常见的比较器的实现方法

    在java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题. 通常对象之间的比较可以从两个方面去看: 第一个方面:对象的地址是否一样,也就是是否引用自同一个对象.这种方式可以直接使用& ...

  4. Java中 9 种常见的 CMS GC 问题分析与解决

    目录 Java中 9 种常见的 CMS GC 问题分析与解决 1. GC 1.1 引言 1.2 概览 2. GC 基础 2.1 基础概念 2.2 JVM 内存划分 2.3 分配对象 2.4 收集对象 ...

  5. Java有几种文件拷贝方式?哪一种最高效?

    第12讲 | Java有几种文件拷贝方式?哪一种最高效? 我在专栏上一讲提到,NIO 不止是多路复用,NIO 2 也不只是异步 IO,今天我们来看看 Java IO 体系中,其他不可忽略的部分. 今天 ...

  6. Java的几种常见接口用法

    2019独角兽企业重金招聘Python工程师标准>>> Java的几种常见接口用法 今天在看阎宏的< Java与模式>,里面对 java的 几种 接口的常用方法的总结: ...

  7. java中几种创建对象的方式

    java中几种创建对象的方式 在java程序中,对象可以被显式地或者隐式地创建. 下面说说四种显式的创建对象的方式:     ●  用new语句创建对象     ●  运用反射手段,调用java.la ...

  8. Java中两种抛出异常的方式

    Java中两种抛出异常的方式 在Java中有两种抛出异常的方式,一种是throw,直接抛出异常,另一种是throws,间接抛出异常. 直接抛出异常是在方法中用关键字throw引发明确的异常.当thro ...

  9. java单例模式 三种_三种java单例模式概述

    在java语言的应用程序中,一个类Class只有一个实例存在,这是由java单例模式实现的.Java单例模式是一种常用的软件设计模式,java单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种.下 ...

最新文章

  1. 如何用PyTorch进行语义分割?
  2. VSFTPD的虚拟用户管理配置
  3. 看一下操作闪电网络最大的节点是什么感觉
  4. 中国量子通信再获突破,潘建伟团队完成人类首次洲际量子通信
  5. Android 动画 介绍与使用
  6. Python的可变类型与不可变类型
  7. C++中如何定义动态数组
  8. 五、规则组织的衍生组织——纬山形组织数学模型的建立
  9. 常用的作业调度算法应用练习
  10. 数据结构学习笔记:实现链表
  11. 传统人工势场法---经典算法
  12. Flutter TextFiled去掉下划线
  13. mysql 按照年龄段分组查询
  14. 在没有ftp上传软件时怎么上传
  15. IDEA上tomcat日志输出乱码 淇℃伅 鏈嶅姟鍣ㄧ増鏈彿(锛 解决办法
  16. 流星加速器木马分析与处置方案
  17. zoj 1005 Jugs BFS
  18. 黄冈师范学院计算机科学与技术学院,黄冈师范学院 计算机科学与技术学院 刘小俊老师简介 联系方式 手机电话 邮箱...
  19. 阿里云 ACP 认证,分享下经验心得
  20. 20189220 余超《Linux内核原理与分析》第三周作业

热门文章

  1. CVPR 2021 审稿意见出了,你也许需要这份学术论文投稿与返修指南
  2. ubuntu vi/vim退出文件
  3. Unity打包apk报错: Cannot fit requested classes in a single dex file (# methods: 73376 > 65536)的解决办法
  4. 基础语法(整型:uint、uint8、uint16、uint32、uint64、uintptr)
  5. RecyclerView添加头部
  6. JS中[].slice.call的理解
  7. 【MySQL作业】分组查询 group by 子句——美和易思分组查询应用习题
  8. 【Error】解决ubuntu 18.04 dns故障
  9. 数据集市是什么?数据集市和数据仓库有什么区别
  10. 大数据分析的技术有哪些?