单例模式:采取一定的方法保证在整个软件系统中,对某个类只存在一个对象实例
恶汉式—>缺点:对象加载时间过长 优点:是线程安全的
懒汉式—>缺点:是线程不安全的 优点:延迟对象的创建

恶汉式:
public class Bank {//私有化类的构造器private Bank(){}//内部创建类的对象,同时设置为静态private static Bank instance = new Bank();//提供公共的静态方法,返回类的对象public static Bank getInstance(){return instance;}
}public class Main {public static void main(String[] args) {Bank bank1=Bank.getInstance();Bank bank2= Bank.getInstance();//返回true,说明是同一个对象,是单例模式System.out.println(bank1==bank2);}
}

<------------------------------------------------------------------------->

懒汉式:
public class Bank {//私有化类的构造器private Bank(){}//声明当前类对象且不初始化,同时该对象必须为staticprivate static Bank instance = null;//声明public、static的返回当前类对象的方法public static Bank getInstance(){if (instance == null) {instance = new Bank();}return instance;}
}public class Main {public static void main(String[] args) {Bank bank1=Bank.getInstance();Bank bank2= Bank.getInstance();//返回true,说明是同一对象,是单例模式System.out.println(bank1==bank2);}
}

<------------------------------------------------------------------------->

懒汉式关于线程不安全的解决方法:
public class Bank {//私有化类的构造器private Bank(){}//声明当前类对象且不初始化,同时该对象必须为staticprivate static Bank instance = null;/*对于下面代码的解释:假如当有3个线程a,b,c,它们同时通过第一层if语句,接着有锁,这时就看哪一个线程先得到锁,假设线程a先得到锁,那么此时a线程就先进入第二层if语句,剩下的线程b和线程c发现已经锁上了就进不了if方法了,当线程a执行完之后已经产生对象了,轮到线程b和线程c了,但是此时线程b和c发现instance已经有了,不为null了,所以就直接输出instance了。假设后面又进来了几个线程,比如d和e,此时instance不为null了,所以d和e就不用判断第一个if语句了,直接输出instance,大大提高了效率且不用再担心多线程的安全问题了。*/public static Bank getInstance(){if(instance == null){/*注意静态static方法的同步监视器即synchronized后面括号里要填该对象产生的class文件,原因就是静态static是在类被调用之前就已经存在了,而Bank.class是在编译时期就已经产生了,故同步监视器只能选Bank.class;如果不为静态static方法就直接在括号内填this(即本对象)就可以了。*/synchronized(Bank.class){if (instance == null) {instance = new Bank();}}}return instance;}
}public class Main {public static void main(String[] args) {Bank bank1=Bank.getInstance();Bank bank2= Bank.getInstance();//返回true,说明是同一对象,是单例模式System.out.println(bank1==bank2);}
}

单例模式的两种实现方式:恶汉式和懒汉式相关推荐

  1. 【无标题】单例模式的两种创建方式:饿汉式和懒汉式

    这里写自定义目录标题 单例模式的两种创建方式:饿汉式和懒汉式 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂 ...

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

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

  3. 用python实现单例模式_Python单例模式的两种实现方式

    单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 比如,某 ...

  4. php 恶汉单例,单例模式的两种方式(恶汉式,懒汉式)

    单例模式的两种形式(恶汉式,懒汉式) 单例模式的特点:解决了一个类在内存的唯一性,这个类的对象只有一个. 写单例模式的步骤: 1. 私有修饰构造方法 2. 在本类的成员位置, new 自己类的对象 3 ...

  5. java两种绑定方式_java两种单例模式用法分析

    本文实例讲述了java两种单例模式用法.分享给大家供大家参考,具体如下: 按照加载方式的不同,单例模式有两种实现: private:只能在同一个类中使用 static:该类是类方法,不能调用实例方法. ...

  6. 黑马程序员,黑马论坛-------单例模式的两种实现(恶汉+懒汉)

    文章来源:黑马程序员,黑马论坛 单列模式的实现主要有两种:饿汉式单例类和懒汉式单例类 1)饿汉式单例类 代码清单1:饿汉式单例类 public class EagerSingleton{ privat ...

  7. 单例模式的几种实现方式详解以及原理

    单例模式介绍 前言 这是一个的萌新写的博客,以下是学习课程以后的总结,用于个人的复习与总结,如果有误还请多多包容和指正. 了解单例模式: 单例类只能有一个实例 单例必须创建自己的唯一一个实例 单例类必 ...

  8. Java23种设计模式之单例模式的五种实现方式、反射破解单例模式、不能破解枚举单例模式详解

    源码链接(Gitee码云):https://gitee.com/oldou/javadesignpatterns 这里有我整理好的Java23种设计模式的源码以及博客教程,博客教程中介绍了Java23 ...

  9. C++中的两种绑定方式(静态绑定、动态绑定)

    两种绑定方式 静态绑定:在编译时刻,根据指针或引用变量的静态类型来决定成员函数属于哪一个类. 动态绑定:在运行时刻,根据指针或引用变量实际指向或引用的对象类型(动态类型)来确定成员函数属于哪一个类. ...

最新文章

  1. 重构第15天 移除重复的代码(Remove Duplication)
  2. 【Cubase】Cubase 量化设置 ( 量化预置 | 长度量化 | 快捷键设置 | 量化开头 | 量化 MIDI 事件结尾 | 量化 MIDI 事件长度 )
  3. python templates_python templates在哪
  4. Android照片墙完整版,完美结合 内存方案 LruCache 和 硬盘方案 DiskLruCache
  5. 远洋整站下载器不能用https_最后下载个喜马拉雅
  6. 96. Unique Binary Search Trees1和2
  7. win10 安装Pytorch GPU版+CUDA+cuDNN(篇幅较长保姆教程) (含CUDA11.1与cuDNN8.0.4安装包)
  8. 关于pycharm的一个imoprt的随笔
  9. numeric库函数——accumulate函数
  10. 图像识别与软件自动化测试
  11. java转码工具_java转码工具native2ascii
  12. aspectjweaver的作用
  13. 【PS】4组318张超高清叠加层+PS动作图片素材
  14. PID参数调节的经验
  15. 好听的女孩名字2225个 懿婕、馨媛、雨熙、若涵、馨瑜、瑾涵、羽欣、琪悦、逸菲、馨瑜、雨婷、昕妤、婉婷、梦琪、馨月、佳瑜、晓琦、婷瑛、诗琪、瑾瑜、艺琳、雨婷、欣怡、诗雨、佳琪、悦涵、昕瑶、蓓佳、诗萌、
  16. 教程篇(7.0) 04. FortiGate基础架构 二层交换 ❀ Fortinet 网络安全专家 NSE 4
  17. 短视频剪辑如何才能更吸引人?
  18. 一张图看懂自动驾驶的分级
  19. 【机器学习】简单理解精确度(precision)和准确率(accuracy)的区别
  20. 【分块】铃铛计数问题

热门文章

  1. 【2003-5】【芝麻开门】
  2. 如何在centos7中安装QQ
  3. Word上下标符号怎么打
  4. 我仅代表还是我谨代表
  5. Unity3D : 腾讯云语音(GCloudVoice)的语音转文字功能
  6. 炫酷黑色系北漂鱼官网源码
  7. iOS开发 编译工程师 遇到once.h beng'kuispatch_once(predicate,block)重新拉取代码后解决
  8. pintia 7-25 最优二叉搜索树
  9. PTA|pintia分段计算居民水费【1】
  10. 近期题目整理2.0(递归和简单dfs)