今天学到单例模式,对几种单例模式的特点做了一次梳理,从线程安全性和性能两个方面来说。

首先都知道有两种最常见的单例模式:饿汉式和懒汉式,如下:

饿汉式:

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设计模式学习笔记:单例模式(一)相关推荐

  1. java设计模式学习笔记之装饰模式

    java设计模式学习笔记之装饰模式 尊重原创,转载请注明出处,原文地址: http://blog.csdn.net/qq137722697 这是一个使用策略模式和构建模式设计的网络请求框架,去看看吧& ...

  2. java设计模式-学习笔记

    java设计模式 概述 "设计模式"这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中. <设计模式:可复用面向对象软件的基础>(Design Patter ...

  3. C#设计模式学习笔记-单例模式

    最近在学设计模式,学到创建型模式的时候,碰到单例模式(或叫单件模式),现在整理一下笔记. 在<Design Patterns:Elements of Resuable Object-Orient ...

  4. Java设计模式学习记录-单例模式

    前言 已经介绍和学习了两个创建型模式了,今天来学习一下另一个非常常见的创建型模式,单例模式. 单例模式也被称为单件模式(或单体模式),主要作用是控制某个类型的实例数量是一个,而且只有一个. 单例模式 ...

  5. 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)

    一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...

  6. 图解Java设计模式学习笔记——结构型模式(适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式)

    一.适配器模式(类适配器.对象适配器.接口适配器) 1.现实生活中的例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器),这样就可以使用了国内的电器了. 2.基本介绍 适配器模式(Ad ...

  7. Header First设计模式学习笔记——单例模式

    2019独角兽企业重金招聘Python工程师标准>>> 问题引入         有时候对于有些对象,我们只需要一个,多了反而会出现很多问题.比如:线程池,缓存,处理器偏好设置,日志 ...

  8. java 设计模式学习笔记十 bridge桥模式

    bridge桥模式 将抽象和行为划分开来,各自独立但能动态结合 抽象的接口 /**  * 咖啡抽象类  *   * @time 下午09:14:27  * @author retacn yue  * ...

  9. java 设计模式学习笔记十四 template模版模式

    /**  * 模版  *   * @time 下午09:58:00  * @author retacn yue  * @Email zhenhuayue@sina.com  */ public abs ...

最新文章

  1. python -asyncio
  2. [再寄小读者之数学篇](2014-04-22 平方差公式在矩阵中的表达)
  3. 充电电流用软件测试准吗,实验:1A与2.1A对手机充电电流一样的,小伙伴再也不用担心咯...
  4. dtft变换的性质_[2018年最新整理]DTFT变换.ppt
  5. 2017年高考改革地区:浙江、上海
  6. C#不登录电脑启动程序
  7. 3.修改和编译XposedBridge.jar 和 api.jar
  8. 吴恩达教授机器学习课程笔记【四】- 生成学习算法(1)高斯判别分析模型
  9. 异速联显示连接服务器失败,异速联客户端登陆时正在连接服务器
  10. 20155304《网络对抗》信息搜集与漏洞扫描
  11. IDEA设置主题样式
  12. 怎么做有效沟通技巧员工培训PPT课件?
  13. An attempt was made to call the method javax.persistence.PersistenceContext.synchronization()
  14. raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+‘; not sup
  15. 关于地下管线探测技术发展的思考
  16. 新视野大学英语听说教程4(第二版)答案
  17. java jdbc连接sql server2014
  18. 文件存储的实现-login登录案例2-sdcard
  19. Java实现RSA 2048加密解密
  20. 在审计中用到的计算机知识,2019注册会计师考试《审计》第五章知识点:信息技术对审计过程的影响...

热门文章

  1. 概率论-基础计算公式与函数
  2. 人工智能专业需要什么电脑
  3. mysql 架构 ~ binlog_server
  4. 2020年中国嵌入式软件市场现状分析,国家政策大力支持行业发展「图」
  5. 2014小学计算机教师招聘笔试,2014江西教师招聘考试《小学信息技术》真题及答案解析.doc...
  6. 计算机网络(四)——媒体访问控制
  7. 【稳定性day1】从DBA到运维架构总监之路 - 专注的力量
  8. 删除u盘插拔记录linux,电脑u盘插拔记录_电脑u盘插拔时间记录
  9. 电子计算机师德风范 论文,师德师风论文2000字
  10. Competition4_t3