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面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?
什么是单例设计模式? 单例设计模式就是一种控制实例化对象个数的设计模式. 为什么要使用单例设计模式? 使用单例设计模式可以节省内存空间,提高性能.因为很多情况下,有些类是不需要重复产生对象的. 如果重 ...
随机推荐
- [LeetCode] 815. Bus Routes 公交路线
We have a list of bus routes. Each routes[i] is a bus route that the i-th bus repeats forever. For e ...
- swoole实现多人游戏的要点
swoole实现多人游戏的要点 比方说多人在线 要满足以下两点 1 所有玩家的数据要实时更新到服务器数据库数据 2 写个定时器返回数据
- web动静分离
1 动态资源和静态资源 动态资源:多次访问页面,原代码会发生改变,比如jsp 静态资源:多次访问页面,原代码不发生改变,比如html,css 2 动静分离 将动态资源(jsp)放在tomcat服务器中 ...
- 统一封装json返回结果
import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.map.annotate.JsonSerial ...
- Java开发笔记(一百一十三)HttpClient实现下载与上传
前面介绍了通过HttpClient实现HTTP接口的GET方式调用和POST方式调用,那么文件下载与文件上传又该如何操作呢?其实在HttpClient看来,文件下载属于特殊的GET调用,只不过应答报文 ...
- Java开发笔记(一百一十七)AWT窗口
前面介绍的所有Java代码,都只能通过日志观察运行情况,就算编译成class文件,也必须在命令行下面运行,这样的程序无疑只能给开发者做调试用,不能拿给一般人使用.因为普通用户早已习惯在窗口界面上操作, ...
- 转载:c++获取本机IP地址
windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...
- Python中的int函数
python帮组文档 class int(x, base=10) Return an integer object constructed from a number or string x, or ...
- 关于goquery的“non-standard import”错误
goquery运行缺包就用get github.com\andybalholm\cascadia下到gopath,然后出现“non-standard import”错误,说明github.com\an ...
- [洛谷P5377][THUPC2019]鸽鸽的分割
题目大意:有一个圆,圆上有$n$个点,将这几个点两两连接,问最多分成几部分 题解:发现这相当于一个平面图,由欧拉公式得($F$为平面分割块数,$E$为平面图边数,$V$为平面图点数):$$F=E-V+ ...