24种设计模式-单例模式-懒汉模式详解
Java设计模式
- 单例设计模式
应用场景:重量级的对象,不需要多个实例,如线程池,数据库连接池等。- 懒汉模式(lazySingleton)
//单线程下的懒汉单例模式public class LazySingleton {private static LazySingleton instance;//构造器私有化,让外包无法通过构造方法创建该对象private LazySingleton(){}//提供get方法给外部访问public static LazySingleton getInstance() {if (instance == null){instance = new LazySingleton();}return instance;}}
//多线线程的懒汉单例模式public class LazySingleton {private static LazySingleton instance;//构造器私有化,让外包无法通过构造方法创建该对象private LazySingleton(){}//提供get方法给外部访问//添加synchronized 加锁,但是性能有损耗public synchronized static LazySingleton getInstance() {if (instance == null){instance = new LazySingleton();}return instance;}}
//多线线程的懒汉单例模式———优化延迟public class LazySingleton {private static LazySingleton instance;//构造器私有化,让外包无法通过构造方法创建该对象private LazySingleton(){}//提供get方法给外部访问public synchronized static LazySingleton getInstance() {//只在没有对象为空的时候添加synchronized 减少损耗if (instance == null){synchronized(LazySingleton.class){instance = new LazySingleton();}}return instance;}}
//多线线程的懒汉单例模式———究极优化public class LazySingleton {private static LazySingleton instance;//构造器私有化,让外包无法通过构造方法创建该对象private LazySingleton(){}//提供get方法给外部访问public synchronized static LazySingleton getInstance() {//只在没有对象为空的时候添加synchronized 减少损耗if (instance == null){synchronized(LazySingleton.class){//如果有两个线程同时进来后,一个先实例化,那么第二个则不用加锁实例化了,只有在所有线程都为空的时候创建才加锁if (instance == null){instance = new LazySingleton();}}}return instance;}}
- 简单此程序的了解字节码的执行过程
JIT和CPU对加载顺序进行排序:- 分配空间
- 引用赋值
- 初始化
引用赋值和初始化可以互换顺序,所以此程序有可能导致空指针问题
//多线线程的懒汉单例模式———最终版本public class LazySingleton {//volatile 防止对象对应的字节码加载重排序private volatile static LazySingleton instance;//构造器私有化,让外包无法通过构造方法创建该对象private LazySingleton(){}//提供get方法给外部访问public static LazySingleton getInstance() {//只在没有对象为空的时候添加synchronized 减少损耗if (instance == null){synchronized(LazySingleton.class){//如果有两个线程同时进来后,一个先实例化,那么第二个则不用加锁实例化了,只有在所有线程都为空的时候创建才加锁if (instance == null){instance = new LazySingleton();}}}return instance;}}
24种设计模式-单例模式-懒汉模式详解相关推荐
- 24种设计模式大全-牛人详解
Longronglin之设计模式: Christopher Alexander 说过:"每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样,你就能一次又一次地 ...
- 设计模式之模板方法模式详解
设计模式之模板方法模式详解 概述 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的 ...
- 设计模式之门面模式详解
设计模式之门面模式详解 文章目录 设计模式之门面模式详解 一.什么是门面模式 二.门面模式的应用场景 三.门面模式的角色组成 四.门面模式通用写法 五.门面模式在业务中的应用 六.门面模式优缺点 一. ...
- 设计模式——模版方法模式详解(论沉迷LOL对学生的危害)
0. 前言 写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦 ...
- 设计模式之桥接模式详解
设计模式之桥接模式详解 文章目录 设计模式之桥接模式详解 一.什么是桥接模式 二.桥接模式的应用场景 三.桥接模式的角色组成 四.桥接模式通用写法示例 五.桥接模式优缺点 一.什么是桥接模式 桥接模式 ...
- 设计模式之策略模式详解
设计模式之策略模式详解 概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车.可以坐汽车.可以坐火车.可以坐飞机. 作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有 ...
- 设计模式之工厂模式详解(附应用举例实现)
文章目录 1 工厂模式介绍 2 工厂模式详解 2.1 简单工厂模式 2.1.1 简单工厂模式结构 2.1.2 简单工厂模式实现 2.1.3 简单工厂模式应用举例 2.2 工厂方法模式 2.2.1 工厂 ...
- 设计模式之桥接模式详解(附应用举例实现)
文章目录 1 桥接模式介绍 2 桥接模式详解 2.1 桥接模式结构 2.2 桥接模式实现 2.3 桥接模式应用实例 1 桥接模式介绍 毛笔和蜡笔是两种很常见的文具,它们都归属于画笔.假设我们需要大.中 ...
- 设计模式之原型模式详解(附应用举例实现)
文章目录 1 原型模式介绍 2 原型模式详解 2.1 原型模式结构 2.2 深克隆与浅克隆 2.2.1 浅克隆 2.2.2 深克隆 2.3 原型模式实现 2.3.1 通用实现方法 2.3.2 Java ...
- 设计模式之命令模式详解(附应用举例实现)
文章目录 1 命令模式介绍 2 命令模式详解 2.1 命令模式结构 2.2 命令模式实现 2.3 命令模式应用举例 3 实现命令队列 1 命令模式介绍 在现实生活中人们通过使用开关来控制一些电器的打开 ...
最新文章
- 揭秘:美国国防部用什么样的操作系统
- 使用Docker Compose 搭建lnmp
- 编辑器Sublime Text 2
- eclipse 全屏插件
- 通读AFN①--从创建manager到数据解析完毕
- 用java输入学生姓名查询成绩_编写一个Java程序,提示用户输入学生数量,学生姓名和他们的成绩,并按照成绩的降序打印学生姓名...
- JS助记 ----- 正则表达式
- 【Shell】sed实例之第三部分
- mac模式怎样构造在jsp中_在MAC下搭建JSP开发环境
- nodejs操作redis总结
- Ubuntu 12.04 LTS 键盘快捷键(转)
- 计算机三级-数据库技术
- C# 开发Chrome内核浏览器(WebKit.net)
- 《欲罢不能:刷屏时代如何摆脱行为上瘾》书摘
- win10企业版2016长期服务版 无法远程桌面
- win10系统迁移后系统重装_win10系统迁移超简单!详细步骤解析
- android虚线边框_Android自定义View之绘制虚线
- 2022-2028年中国高通量药物筛选与创新药物行业市场调查研究及发展前景展望报告
- 2.Java语言基础——流程控制语句与方法
- Html设置超链接文字颜色
热门文章
- 2009年SNS社区源码大集合
- 下载ue5和古代山谷
- android root刷机包包,安卓ROOT卡刷包通用版【安致提供】
- Ubuntu安装客户端RabbitVCS(svn管理)
- odoo16 Windows绿色版 下载就能尝试了
- java组件技术考试题_Java核心技术2020年春答案试题题目及答案,期末考试题库,章节测验答案...
- sonar pmd\p3c插件源码初步解析
- 2020年日历电子版(打印版)_2020年日历表超清晰A4打印版下载
- WebDAV之葫芦儿·派盘+Solid Explorer = 全能 Android 文件管理器
- 智能电视软件安装(WIFI上网)