Spring -11 -单例设计模式 -懒汉式/饿汉式(idea默认的)
单例设计模式
- 作用: 在应用程序有保证最多只能有一个实例.
- 好处:
2.1 提升运行效率.
2.2 实现数据共享. 案例:application 对象
- 懒汉式
3.1 对象只有被调用时才去创建.
3.2 示例代码
3.3由于添加了锁,所以导致效率低.
public class lazySingleton { //懒汉式,单例模式!
//由于对象需要被静态方法调用,把方法设置为static
//由于对象是static,必须要设置访问权限修饰符为private ,
//如果是public 可以直接调用对象,不执行访问入口
private static lazySingleton ourInstance ;
/**
*方法名和类名相同,无返回值.
*其他类不能实例化这个类对象;对外提供访问入口
*/
private lazySingleton() {
}
/**
*实例方法,实例方法必须通过对象调用
*设置方法为静态方法
*@return 一个上面的static 对象
*/
public static lazySingleton getInstance() {
//添加逻辑如果实例化过,直接返回
if(ourInstance==null){
/*
* 多线程访问下,可能出现if 同时成立的情况,添加锁;
监控这个类下创建一个锁,每次只允许一个class进入;
*/
synchronized (lazySingleton.class){
if(ourInstance==null){ //双重验证
ourInstance =new lazySingleton();
}
}
}
return ourInstance;
}
}
3.4 测试
lazySingleton singleton = lazySingleton.getInstance();
lazySingleton singleton1 = lazySingleton.getInstance();
System.out.println(singleton==singleton1);
System.out.println(singleton);
System.out.println(singleton1); --------------------
true
com.test.lazySingleton@60e53b93
com.test.lazySingleton@60e53b93
4.饿汉式 (IDEA 编译器默认的singleTon)
解决了懒汉式中多线程访问可能出现同一个对象和效率低问题 ,多个实例共用一个对象!
public class hungerSingleton {
private static hungerSingleton ourInstance = new hungerSingleton();
public static hungerSingleton getInstance() {
return ourInstance;
}
private hungerSingleton() {
}
}
Spring -11 -单例设计模式 -懒汉式/饿汉式(idea默认的)的更多相关文章
- Java 单例设计模式之 饿汉式和懒汉式
public class InstanceSampleTest { public static void main(String[] args) { /** 单例设计模式的 饿汉式和懒汉式 * 单例模 ...
- 设计模式——懒汉式单例类PK饿汉式单例类
前言 我们都知道生活中好多小软件,有的支持多IP在线,有的仅仅局限于单个IP在线.为什么这样设计,在软件开发阶段就是,有需求就是发展.这就是软件开发的一个设计模式--懒汉式单例类和饿汉式单例类. 内容 ...
- Java中单例设计模式,饿汉式和懒汉式
Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯 ...
- Java---15---单例设计模式:---饿汉式和懒汉式
概念: 单例模式确保某个类仅仅有一个实例.并且自行实例化并向整个系统提供这个实例. 单例模式有下面特点: 1.单例类仅仅能有一个实例 2.单例类必须自己给自己创建自己的唯一实例 3.单例类必须给全 ...
- java中的单例模式(懒汉式+饿汉式)
什么是单例模式: 单例模式既只能在自己本类中创建有且唯一的一个实例(姑且不考虑映射的情况)通过方法将该实例对外公开 第一种:单例模式-懒汉式 既调用getInstance()方法返回实例之前判断有没有 ...
- 设计模式课程 设计模式精讲 8-2 单例设计模式-懒汉式及多线程Debug实战
1 主要内容 1.1 多线程debug 1.2 synchronized同步锁的调用 1.3 懒加载的应用 2 代码演练 2.1 单线程调用 2.2 多线程调用 2.3 锁的调用 1 主要内容 1.1 ...
- Java面向对象 Main函数 静态的应用 单例设计模式
Java面向对象 Main函数 静态的应用与单例设计模式 知识概要 (1)Main函数的细解 (2)静态的应用,静态变量,静态代码块,静态函数 (3)单例设计模式 1.M ...
- scala:分别使用懒汉式和饿汉式实现单例模式
在java中,单例模式需要满足以下要求: 构造方法私有化,使得本类之外的地方不能使用构造方法new出对象 提供私有静态属性,接收单例对象 公共的.静态的getInstance方法,便于外界拿到单例对象 ...
- Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?
什么是单例设计模式? 单例设计模式就是一种控制实例化对象个数的设计模式. 为什么要使用单例设计模式? 使用单例设计模式可以节省内存空间,提高性能.因为很多情况下,有些类是不需要重复产生对象的. 如果重 ...
随机推荐
- Shell中要如何调用别的shell脚本,或别的脚本中的变量,函数
在Shell中要如何调用别的shell脚本,或别的脚本中的变量,函数呢? 方法一: . ./subscript.sh 方法二: source ./subscript.sh 注意: 1.两个点之 ...
- Java高级面试题整理(附答案)
这是我收集的10道高级Java面试问题列表.这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题.你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Java ...
- php_mvc实现步骤五
5.match_controller 控制器层典型实现 控制器类 依据功能的相关性,将一系列相关的功能,使用一个控制器类来处理,而该控制器的每个方法,就对因某个功能. 注意:控制器是按照功能划分的.( ...
- dubbo 使用、原理、接口请求,都经历了什么过程
[dubbo官网文档]http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
- mycat实现读写分离
1 mysql已经配置好了主从 2 linux 安装java环境 3 linux 安装mycat cd /usr/local # 下载mycat wget http://dl.mycat.io/1.6 ...
- 【转帖】处理器史话 | 服务器CPU市场的战役, AMD、Intel和ARM的厮杀
处理器史话 | 服务器CPU市场的战役, AMD.Intel和ARM的厮杀 https://www.eefocus.com/mcu-dsp/377300 说完了个性鲜明的消费类电子,接下来聊一聊通 ...
- enum类型的标签内容根据语言的取法
昨天做了一个开发,说要取enum里面英文label 例如 JournalType 枚举值有 transfer\profit/loss 但是在中文的AX系统时会显示“转移\盈亏”, 但是客户又 ...
- 正则表达式"(^|&)" ,什么意思?
^匹配字符串开头,&就是&字符 (^|&)匹配字符串开头或者&字符,如果其后还有正则,那么必须出现在字符串开始或&字符之后 用法一: 限定开头 文档上给出了 ...
- quartz 定时器执行
类存储job信息 public class JobInfo {//省略setter getter String jobName; String jobGroup; Class<? extends ...
- js计算结果不精确问题解决--math.js的使用
最近在做订单相关的一个功能,涉及到金额的计算,有人建议,将计算全部抛给后端来做吧,前端就不需要再维护一套算法了,话说的在理,但是呢,想想用户体验,单价*数量=金额,当用户改变一个数量时,用户都口算出来 ...