单例设计模式

所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为private,这样子,我们就不能用new操作符在类的外部产生类的对象了,但在类的内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。

饿汉式

不存在线程不安全的问题

class Singleton{//私有化类的构造器,让外部无法调用private Singleton(){}//类的内部创建类的对象,并且此对象必须声明静态private static Singleton instance= new Singleton();//提供公共的静态的方法,返回类的对象public static Singleton getInstance(){return instance;}
}

懒汉式

①存在线程不安全的问题

class Singleton{//私有化类的构造器private Singleton(){}//声明当前类的对象,并且是static,但是没有赋值private static Singleton instance = null;//声明为public、static的方法用来返回类的实例//如果发现当且instance为null,给instance创建一个实例。public static Singleton getInstance(){if(instance == null){instance = new Singleton();}return instance;}
}

②解决线程不安全的懒汉式代码:

class Singleton{//私有化类的构造器private Singleton(){}//声明当前类的对象,并且是static,但是没有赋值//此处添加volatile是为了防止指令重排序private static volatile Singleton instance = null;//声明为public、static的方法用来返回类的实例//如果发现当且instance为null,给instance创建一个实例。public static Singleton getInstance(){if(instance == null){synchronized(Singleton.class){if(instance == null){//这并不是一个原子操作//1.给instance分配内存空间//2.调用Singleton构造函数初始化//3.将instance对象指向分配的内存空间,此时instance不为null//使用volatile修饰instance就是防止这1-2-3步被指令重排,保证其顺序执行instance = new Singleton();}}}return instance;}
}

结尾

如果面试要求写一个单例模式,最好写饿汉式,因为饿汉式不存在线程不安全的问题。如果要写懒汉式,那就写第二种解决的线程安全问题的代码

Java单例模式(饿汉式和懒汉式)代码相关推荐

  1. 单例模式饿汉式与懒汉式详解

    单例模式饿汉式与懒汉式详解 步骤: 私有构造方法,使得在类的外部不能调用此方法,限制产生多个对象 类初始化时,区分饿汉式与懒汉式的区别 对外部提供调用方法,将创建的对象返回,只能通过类来调用 饿汉式: ...

  2. java 单例模式 ---饿汉式懒汉式

    目录 单例设计模式 饿汉式 懒汉式 饿汉式vs懒汉式 结语 单例设计模式 所谓单例设计模式,就是采取一定的方法在整个软件系统中,对某个类只能存在一个对象实例 1.单例类只能有一个实例. 2.单例类必须 ...

  3. Java-Day12 面向对象的三大特征之封装、继承,单例模式(饿汉式、懒汉式)、方法重写 (覆盖)、注解 (annotation)、super关键字、对象的创建流程超详细

    目录 1. 面向对象的三大特征之封装 1.1 封装的含义 1.2 封装的目的 1.3 封装的优点 1.4 封装的实现过程 1.5 拓展知识:JavaBean 2. 面向对象的三大特征之继承 2.1 继 ...

  4. 单例模式——饿汉式和懒汉式

    单例模式:一个类只允许存在唯一的对象,并提供它的访问方式 创建思路: 1.禁止在类的外部创建对象:私有化构造函数 2.在类的内部提供唯一的对象:静态成员变量 3.提供访问唯一对象的方法:静态成员函数 ...

  5. Singleton模式(单例模式) 饿汉式和懒汉式

    目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例. 好比一个国家就只有一个皇帝(XXX),此时每个人叫的"皇帝"都是指叫的XXX本人; 常见单例模式类型: ...

  6. Java中单例模式—饿汉式和懒汉式

    所谓单例模式就是为了确保类在内存中只有一个对象,之所以会出现单例模式是因为,单例模式在系统内存中只存在一个对象,可以节约资源 目录 一.饿汉式 二.懒汉式 一.饿汉式 该方式在开发中是经常用的,因为这 ...

  7. 【学习笔记】【C++整理A】【总】单例模式-饿汉式、懒汉式;

    文章目录 一.语言分类: 三.基础A:- 函数重载.默认参数.extern "C".重复包含 1.函数重载 2.默认参数 3.extern "C" 4.防止重复 ...

  8. Java实现单例模式之饿汉式、懒汉式、枚举式,带测试。

    Java实现单例的3种普遍的模式,饿汉式.懒汉式.枚举式. 具体代码如下: package com.lcx.mode;/*** * 饿汉式单例,不管以后用不用这个对象,我们一开始就创建这个对象的实例, ...

  9. java学习之单例模式(饿汉式与懒汉式)

    ---恢复内容开始--- 设计模式:解决某一类问题最行之有效的方法 java中有23种设计模式 今天学习其中一种:单例设计模式:解决一个类在内存只存在一个对象 想要保证对象唯一. 1.为了避免其他程序 ...

  10. 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)

    单例模式 单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的 ...

最新文章

  1. spfa(还不懂--)
  2. Visual C#创建Windows服务程序
  3. 修改了模板文件tpl如何立即生效_Views视图与模板
  4. for-each循环
  5. matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记
  6. 全连接的多层神经网络结构(MultiLayerNet)
  7. SVN+MAVEN项目打包
  8. omniPlan密匙
  9. i yfiygol hul hl
  10. Windows和Mac OS的伽马值
  11. 刀片服务器的机箱显示器,思科 UCS 5100系列刀片服务器机箱
  12. C语言教程(七):函数
  13. R统计绘图-PCA详解1(princomp/principal/prcomp/rda等)
  14. 区块链入门者的五本必读书籍
  15. Linux--用history查看历史命令如何在history命令时,查看历史命令执行时间
  16. 酒店在线订房小程序开发解决方案
  17. GetLasError参数详解
  18. 外贸型网站,应该如何做好SEO优化?
  19. 5800计算机交点法程序大全,FX5800计算器交点法正反算程序加入高程及隧道超欠挖...
  20. 用LED柔性软屏来设计异形造型的创意显示屏。

热门文章

  1. java通过手机号查询联系人_在java中如何根据手机号查询号码归属地
  2. java计算机毕业设计课程在线反馈系统源代码+数据库+系统+lw文档
  3. 豆瓣Top250电影数据分析报告
  4. no `server' JVM at `C:\Program Files\Java\jre6\bin\server\jvm.dll'解决方法
  5. 制作CentOS的U盘启动盘
  6. 深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境
  7. 美团一面、阿里一面复盘总结
  8. 最新微信ipad协议
  9. 我最近一年的奋斗目标
  10. java ee 结构图_J2EE领域的一些技术框架结构图