Java单例模式(饿汉式和懒汉式)代码
单例设计模式
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为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单例模式(饿汉式和懒汉式)代码相关推荐
- 单例模式饿汉式与懒汉式详解
单例模式饿汉式与懒汉式详解 步骤: 私有构造方法,使得在类的外部不能调用此方法,限制产生多个对象 类初始化时,区分饿汉式与懒汉式的区别 对外部提供调用方法,将创建的对象返回,只能通过类来调用 饿汉式: ...
- java 单例模式 ---饿汉式懒汉式
目录 单例设计模式 饿汉式 懒汉式 饿汉式vs懒汉式 结语 单例设计模式 所谓单例设计模式,就是采取一定的方法在整个软件系统中,对某个类只能存在一个对象实例 1.单例类只能有一个实例. 2.单例类必须 ...
- Java-Day12 面向对象的三大特征之封装、继承,单例模式(饿汉式、懒汉式)、方法重写 (覆盖)、注解 (annotation)、super关键字、对象的创建流程超详细
目录 1. 面向对象的三大特征之封装 1.1 封装的含义 1.2 封装的目的 1.3 封装的优点 1.4 封装的实现过程 1.5 拓展知识:JavaBean 2. 面向对象的三大特征之继承 2.1 继 ...
- 单例模式——饿汉式和懒汉式
单例模式:一个类只允许存在唯一的对象,并提供它的访问方式 创建思路: 1.禁止在类的外部创建对象:私有化构造函数 2.在类的内部提供唯一的对象:静态成员变量 3.提供访问唯一对象的方法:静态成员函数 ...
- Singleton模式(单例模式) 饿汉式和懒汉式
目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例. 好比一个国家就只有一个皇帝(XXX),此时每个人叫的"皇帝"都是指叫的XXX本人; 常见单例模式类型: ...
- Java中单例模式—饿汉式和懒汉式
所谓单例模式就是为了确保类在内存中只有一个对象,之所以会出现单例模式是因为,单例模式在系统内存中只存在一个对象,可以节约资源 目录 一.饿汉式 二.懒汉式 一.饿汉式 该方式在开发中是经常用的,因为这 ...
- 【学习笔记】【C++整理A】【总】单例模式-饿汉式、懒汉式;
文章目录 一.语言分类: 三.基础A:- 函数重载.默认参数.extern "C".重复包含 1.函数重载 2.默认参数 3.extern "C" 4.防止重复 ...
- Java实现单例模式之饿汉式、懒汉式、枚举式,带测试。
Java实现单例的3种普遍的模式,饿汉式.懒汉式.枚举式. 具体代码如下: package com.lcx.mode;/*** * 饿汉式单例,不管以后用不用这个对象,我们一开始就创建这个对象的实例, ...
- java学习之单例模式(饿汉式与懒汉式)
---恢复内容开始--- 设计模式:解决某一类问题最行之有效的方法 java中有23种设计模式 今天学习其中一种:单例设计模式:解决一个类在内存只存在一个对象 想要保证对象唯一. 1.为了避免其他程序 ...
- 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)
单例模式 单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的 ...
最新文章
- spfa(还不懂--)
- Visual C#创建Windows服务程序
- 修改了模板文件tpl如何立即生效_Views视图与模板
- for-each循环
- matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记
- 全连接的多层神经网络结构(MultiLayerNet)
- SVN+MAVEN项目打包
- omniPlan密匙
- i yfiygol hul hl
- Windows和Mac OS的伽马值
- 刀片服务器的机箱显示器,思科 UCS 5100系列刀片服务器机箱
- C语言教程(七):函数
- R统计绘图-PCA详解1(princomp/principal/prcomp/rda等)
- 区块链入门者的五本必读书籍
- Linux--用history查看历史命令如何在history命令时,查看历史命令执行时间
- 酒店在线订房小程序开发解决方案
- GetLasError参数详解
- 外贸型网站,应该如何做好SEO优化?
- 5800计算机交点法程序大全,FX5800计算器交点法正反算程序加入高程及隧道超欠挖...
- 用LED柔性软屏来设计异形造型的创意显示屏。
热门文章
- java通过手机号查询联系人_在java中如何根据手机号查询号码归属地
- java计算机毕业设计课程在线反馈系统源代码+数据库+系统+lw文档
- 豆瓣Top250电影数据分析报告
- no `server' JVM at `C:\Program Files\Java\jre6\bin\server\jvm.dll'解决方法
- 制作CentOS的U盘启动盘
- 深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境
- 美团一面、阿里一面复盘总结
- 最新微信ipad协议
- 我最近一年的奋斗目标
- java ee 结构图_J2EE领域的一些技术框架结构图