
Java常用设计模式之单例模式
双重校验锁
具体实现
发布日期:2021-05-07 08:16:29
浏览次数:17
分类:精选文章
本文共 1536 字,大约阅读时间需要 5 分钟。
单例设计模式
一、概念叙述
单例模式是一种常用的软件设计模式,使用单例模式,可以保证为一类只生成唯一的实例对象。也就是说,整个程序空间中,该类只存在一个实例对象。
二、先看个问题
我们通常在实例化对象是,通常是通过去new构造器方法获取一个类的实例化对象。这样就会出现一个问题:那就是每次创建的实例对象的内存地址都不一样。
public class Student { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
三、单例模式实现
(一)、饿汉模式
package 单例模式;/** * 饿汉模式 * 1、初始化类对象 * 2、私有化构造器 * 3、通过静态方法还会 */public class Student { // 初始化对象,当类加载时,就已经把student对象加载到了内存中 private static Student student = new Student(); private String name;// 第一步私有化构造器 private Student() { }// 通过静态方法返回对象 public static Student getInstance() { return student; }}
(二)、懒汉模式
package 单例模式;/* * 懒汉式 * 1、先去创建对象 * 2、私有化构造 * 3、静态方法实例化对象,并返回 * */public class Student1 { // 先创建对象,不去实例化对象 private static Student1 student1 = null;// 私有构造 private Student1() { }// 静态方法返回对象 private static Student1 getInstance() { // 当该方法被调用的时候再去实例化对象 if(student1 == null) { student1 = new Student1(); } return student1; }}
(三)、双重校验锁
双重校验锁就是解决懒汉模式不支持多线程的问题,我们来分析一下为什么懒汉模式不支持多线程!
package 单例模式;/* * 双重校验锁 * */public class Student1 { // 先创建对象,不去实例化对象 private static Student1 student1 = null;// 私有构造 private Student1() { }// 静态方法返回对象 public static Student1 getInstance() { // 当该方法被调用的时候再去实例化对象 if(student1 == null) { // 设置同步代码块 synchronized (Student1.class) { // 再一次进行判断 if(student1 == null) { student1 = new Student1(); } } } return student1; }}
发表评论
最新留言
很好
[***.229.124.182]2025年04月12日 18时14分38秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【Markdown】公式指导手册
2019-03-06
【Maven】POM基本概念
2019-03-06
【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?
2019-03-06
【设计模式】单例模式
2019-03-06
【SpringCloud】Hystrix熔断器
2019-03-06
【SpringCloud】Gateway新一代网关
2019-03-06
【Linux】2.3 Linux目录结构
2019-03-06
java.util.Optional学习笔记
2019-03-06
详解SpringBoot(2.3)应用制作Docker镜像(官方方案)
2019-03-06
远程触发Jenkins的Pipeline任务的并发问题处理
2019-03-06
CoProcessFunction实战三部曲之二:状态处理
2019-03-06
jackson学习之七:常用Field注解
2019-03-06
jackson学习之八:常用方法注解
2019-03-06
Web应用程序并发问题处理的一点小经验
2019-03-06
asp.net core的授权过滤器中获取action上的Attribute
2019-03-06
在ASP.Net Core下,Autofac实现自动注入
2019-03-06
entity framework core在独立类库下执行迁移操作
2019-03-06
Asp.Net Core Identity+EFCore + Mysql踩坑记录
2019-03-06
Asp.Net Core 2.1+的视图缓存(响应缓存)
2019-03-06
服务器开发- Asp.Net Core中的websocket,并封装一个简单的中间件
2019-03-06