1 /**
 2  * 单例模式:保证只有一个实例 private Singleton(){};
 3  * 饿汉式:先创建 private static final Singleton INSTANCE = new Singleton(); 用的时候调用 public static Singleton getInstance(){return INSTANCE;}
 4  * 懒汉式:用的时候创建实例。
 5  *         synchronized在方法内,则主要double-check;
 6  *         同步在方法上 public static synchronized Singleton getInstance(){ if(instanceLazy==null) instanceLazy=new Singleton();return instanceLazy;}
 7  * 静态代码块:
 8  *         static{ instanceStaticBlock = new Singleton();}
 9  * 静态内部类:
10  *         private static class SingletonHolder{ public static final INSTANCE_STATIC_CLASS=new Singleton();}
11  * 枚举:
12  *         public enum SingletonEnum{INSTANCE;}
13  */
14 public class Singleton implements Serializable{
15     private Singleton(){};  // 私有化构造方法,外部无法创建本类
16     // 饿汉式
17     private static final Singleton INSTANCE = new Singleton();
18     public static Singleton getInstanceEager(){ return INSTANCE; }
19     // 懒汉式
20     private static volatile Singleton instanceLazy = null;
21     public static Singleton getInstanceLazy1(){
22         if(instanceLazy == null){
23             synchronized(Singleton.class){
24                 if(instanceLazy == null){
25                     instanceLazy = new Singleton();
26                 }
27             }
28         }
29         return instanceLazy;
30     }
31     public static synchronized Singleton getInstanceLazy2(){
32         if(instanceLazy == null){
33             instanceLazy = new Singleton();
34         }
35         return instanceLazy;
36     }
37     // 静态代码块
38     private static Singleton instanceStaticBlock = null;
39     static{
40         instanceStaticBlock = new Singleton();
41     }
42     public static Singleton getInstanceStaticBlock(){ return instanceStaticBlock; }
43     // 静态内部类
44     private static class SingletonHolder{ public static final Singleton INSTANCE = new Singleton(); }
45     public static Singleton getInstanceStaticClass(){ return SingletonHolder.INSTANCE; }
46
47     // 砖家建议:功能完善,性能更佳,不存在序列化等问题的单例 就是 静态内部类 + 如下的代码
48     private static final long serialVersionUID = 1L;
49     protected Object readResolve(){ return getInstanceStaticClass(); }
50 }
51 //枚举
52 enum SingletonEnum{
53     INSTANCE;
54 }

转载于:https://www.cnblogs.com/wangziqiang/p/5841784.html

单例模式160905相关推荐

  1. Java单例模式个人总结(实例变量和类变量)

    Java单例模式 背景知识:Static关键字. 在对于定义类的变量,分为两种,是否具有static修饰的变量: 没有static修饰的变量,通过类的实例化(对象)引用,改变量称为实例变量: 使用st ...

  2. GOF23设计模式(创建型模式)单例模式

    目录: 一:单例模式的核心作用.常见应用场景 二:五种单例模式及其实现 三:关于反射和反序列化破解单例模式的漏洞,以及相应的解决方案 四:测试五种单例模式的效率 一:核心作用及常见应用场景: 核心作用 ...

  3. Java设计模式:单例模式

    学而时习,稳固而之心, 好久没有复习java的知识了,今天有空温习了单例模式,这里记录一下 单例模式是常见的设计模式的一种,其特点就是 指一个类只有一个实例,且该类能自行创建这个实例  , 保证一个类 ...

  4. [Python设计模式] 第21章 计划生育——单例模式

    github地址:https://github.com/cheesezh/python_design_patterns 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式 ...

  5. Python 精选笔试面试习题—sorted 与 sort 单例模式、统计字符个数Count、垃圾回收、lambda函数、静态方法、类方法、实例方法、分布式锁、

    1. 字典根据键从小到大排序? In[38]: dic = {"name": "Tom", "age": 30, "country ...

  6. 单例模式的两种实现方式对比:DCL (double check idiom)双重检查 和 lazy initialization holder class(静态内部类)...

    首先这两种方式都是延迟初始化机制,就是当要用到的时候再去初始化. 但是Effective Java书中说过:除非绝对必要,否则就不要这么做. 1. DCL (double checked lockin ...

  7. 基础设计模式:单例模式+工厂模式+注册树模式

    单例模式: 通过提供自身共享实例的访问,单例设计模式用于限制特定对象只能被创建一次. 使用场景: 一般数据库实例都会用单例模式 实现: 单例设计模式就是要一个类只能实例化一个对象. 要想让一个类只能实 ...

  8. 设计模式——单例模式(Singleton)

    保证一个类仅有一个实例,并提供一个访问它的全局访问点.--DP UML类图 模式说明 个人认为单例模式是所有设计模式中最为简单的一个模式,因为实现这个模式仅需一个类,而不像其他模式需要若干个类.这个模 ...

  9. 设计模式 之美 -- 单例模式

    为什么要使用单例? 一个类只允许创建一个对象或者实例. 背景简介:使用多线程并发访问同一个类,为了保证类的线程安全,可以有两种方法: 将该类定义为单例模式,即该类仅允许创建一个实例 为该类的成员函数添 ...

最新文章

  1. java initcause_Java 异常
  2. 【0521模拟赛】小Z爱数学
  3. 测试购买到的LMV358 DIP-8封装的芯片特性
  4. 农业银行联行号怎么查询_农行信用卡解析丨菜卡怎么提额8W?学会一招就够了!...
  5. 计算机 java_Java程序到底是如何运行的?
  6. Undefined Reference to Typeinfo
  7. [转]写好shell脚本的13个技巧
  8. python3 可执行文件_将python3打包成为exe可执行文件(pyinstaller)
  9. 前置++与后置++的要点分析
  10. MinIO环境搭建及使用
  11. 百元性价比高的蓝牙耳机推荐:学生党适合使用的蓝牙耳机
  12. unity3D人物动画
  13. html中如何设置表格分页,html中table表格分页(修订了的)
  14. 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON8 LCD1602液晶显示
  15. 添加镜头光晕的正确方法
  16. C:\Users\用户名\Documents不可用
  17. 什么是全栈工程师 摘自360
  18. 卡壳卡壳(是读qia)
  19. 记录一篇触发器的文章
  20. 【JokerのZYNQ7020】FLASH_TEST。

热门文章

  1. 不要滥用UNLOGGED table 和 hash index
  2. innodb_memcache之配置
  3. 词语搜索算法思想 - 第五步 结构实现
  4. 软件问题造成的经济损失案例_公司印章管理使用哪些行为会造成法律风险隐患...
  5. 配置MySQL8.0 环境变量
  6. SpringSecurity OAuth2在项目中使用完成的功能说明
  7. 第五章 数组、矩阵与广义表
  8. 序列化的高阶认识-绕开 transient 机制的办法
  9. MyBatis 插件原理与自定义插件-PageHelper 原理
  10. RocketMQ消息支持的模式-OrderProducer(顺序)