Java设计模式学习笔记:单例模式(一)
今天学到单例模式,对几种单例模式的特点做了一次梳理,从线程安全性和性能两个方面来说。
首先都知道有两种最常见的单例模式:饿汉式和懒汉式,如下:
饿汉式:
public class Hangry() {private Hangry(){};private static final Hangry instance = new Hangry();public static Hangry getInstance() {return instance;}}
懒汉式:
public class Lazy() {private Lazy(){};private static final Lazy instance;public static Lazy getInstance() {if(instance == null) {instance = new Lazy();}return instance;}}
饿汉式在类加载时,就会初始化实例,后续调用的肯定都是一个实例,绝对是线程安全的,但是这样会存在资源浪费,占用内存。
懒汉式是在调用时才初始化,这样会有一个问题就是,在高并发的情况下,可能会调用多次实例化的方法,导致对象进行了多次实例化,破坏了单例,要解决这个问题,有一个方法,就是在获取实例的方法上加一个synchronized修饰词,就能阻止前面提到的线程安全问题,代码如下:
public class Lazy() {private Lazy(){};private static final Lazy instance;public static synchronized Lazy getInstance() {if(instance == null) {instance = new Lazy();}return instance;}}
但是这样又会产生一个新的问题,那就是性能问题,加了synchronized会比没加synchronized时,性能慢很多倍。但是没关系,只要思想不滑坡,方法总比困难多,这个问题也能解决,思路就是使用内部类,内部类只有在外部类被调用时,才会被加载,代码如下:
public class Lazy() {private Lazy(){};public static synchronized Lazy getInstance() {return LazyHolder.lazy;}private static class LazyHolder {private static final Lazy lazy = new Lazy();}
}
Java设计模式学习笔记:单例模式(一)相关推荐
- java设计模式学习笔记之装饰模式
java设计模式学习笔记之装饰模式 尊重原创,转载请注明出处,原文地址: http://blog.csdn.net/qq137722697 这是一个使用策略模式和构建模式设计的网络请求框架,去看看吧& ...
- java设计模式-学习笔记
java设计模式 概述 "设计模式"这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中. <设计模式:可复用面向对象软件的基础>(Design Patter ...
- C#设计模式学习笔记-单例模式
最近在学设计模式,学到创建型模式的时候,碰到单例模式(或叫单件模式),现在整理一下笔记. 在<Design Patterns:Elements of Resuable Object-Orient ...
- Java设计模式学习记录-单例模式
前言 已经介绍和学习了两个创建型模式了,今天来学习一下另一个非常常见的创建型模式,单例模式. 单例模式也被称为单件模式(或单体模式),主要作用是控制某个类型的实例数量是一个,而且只有一个. 单例模式 ...
- 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)
一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...
- 图解Java设计模式学习笔记——结构型模式(适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式)
一.适配器模式(类适配器.对象适配器.接口适配器) 1.现实生活中的例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器),这样就可以使用了国内的电器了. 2.基本介绍 适配器模式(Ad ...
- Header First设计模式学习笔记——单例模式
2019独角兽企业重金招聘Python工程师标准>>> 问题引入 有时候对于有些对象,我们只需要一个,多了反而会出现很多问题.比如:线程池,缓存,处理器偏好设置,日志 ...
- java 设计模式学习笔记十 bridge桥模式
bridge桥模式 将抽象和行为划分开来,各自独立但能动态结合 抽象的接口 /** * 咖啡抽象类 * * @time 下午09:14:27 * @author retacn yue * ...
- java 设计模式学习笔记十四 template模版模式
/** * 模版 * * @time 下午09:58:00 * @author retacn yue * @Email zhenhuayue@sina.com */ public abs ...
最新文章
- python -asyncio
- [再寄小读者之数学篇](2014-04-22 平方差公式在矩阵中的表达)
- 充电电流用软件测试准吗,实验:1A与2.1A对手机充电电流一样的,小伙伴再也不用担心咯...
- dtft变换的性质_[2018年最新整理]DTFT变换.ppt
- 2017年高考改革地区:浙江、上海
- C#不登录电脑启动程序
- 3.修改和编译XposedBridge.jar 和 api.jar
- 吴恩达教授机器学习课程笔记【四】- 生成学习算法(1)高斯判别分析模型
- 异速联显示连接服务器失败,异速联客户端登陆时正在连接服务器
- 20155304《网络对抗》信息搜集与漏洞扫描
- IDEA设置主题样式
- 怎么做有效沟通技巧员工培训PPT课件?
- An attempt was made to call the method javax.persistence.PersistenceContext.synchronization()
- raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+‘; not sup
- 关于地下管线探测技术发展的思考
- 新视野大学英语听说教程4(第二版)答案
- java jdbc连接sql server2014
- 文件存储的实现-login登录案例2-sdcard
- Java实现RSA 2048加密解密
- 在审计中用到的计算机知识,2019注册会计师考试《审计》第五章知识点:信息技术对审计过程的影响...
热门文章
- 概率论-基础计算公式与函数
- 人工智能专业需要什么电脑
- mysql 架构 ~ binlog_server
- 2020年中国嵌入式软件市场现状分析,国家政策大力支持行业发展「图」
- 2014小学计算机教师招聘笔试,2014江西教师招聘考试《小学信息技术》真题及答案解析.doc...
- 计算机网络(四)——媒体访问控制
- 【稳定性day1】从DBA到运维架构总监之路 - 专注的力量
- 删除u盘插拔记录linux,电脑u盘插拔记录_电脑u盘插拔时间记录
- 电子计算机师德风范 论文,师德师风论文2000字
- Competition4_t3