Java设计模式-单例模式

java设计模式之单例模式——Singleton pattern 设计模式故事会:https://blog.youkuaiyun.com/weixin_40205234/article/details/90664824 单例模式 单例模式(Singleton pattern)是java中最常见的设计模式之一。该模式属于创建型设计模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一... 阅读详情

一. 概述

1. 什么是单例模式?

单例模式:为确保一个类只能有一个实例,在这个类中创建自己唯一的实例

2. 为什么用单例模式?

许多时候,整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为,按照单例模式设计类就可以提供这样的全局对象,以避免调用对象不一致的情况。例如线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序等对象常被设计成单例。

3. 单例模式的要素?

  • 私有的构造器
  • 指向自己实例的私有静态引用
  • 返回自己唯一实例的公有静态方法

二. 单例模式

1. 饿汉式(线程安全)

在单例类加载时就实例化一个自己的对象

public class Singleton {
	//1.私有构造器
    private Singleton(){}
	
	//2.私有静态引用
    private static SingletonTest single = new SingletonTest();
	
	//3.共有静态方法
    public static SingletonTest getInstance(){
        return single;
    }
}

2. 懒汉式(线程不安全)

在其他类调用该单例类的方法来获取实例时才实例化一个自己的对象

public class Singleton {
	//1.私有构造器
    private Singleton(){}

	//2.私有静态引用
    private static Singleton single;

	//3.共有静态方法
    public static Singleton getInstance(){
        if(single == null) { //这里可能由于线程阻塞造成了多个线程都判断为null,结果造出多个对象,导致线程不安全
            single = new Singleton();
        }
        return single;
    }
}

懒汉式线程不安全问题解决方法:

  1. 静态方法前加 synchronized 关键字, 同步方法(作用域大,执行效率低)
  2. 静态方法里加 synchronized 同步代码块(执行效率仍低)
  3. 私有静态内部类,延迟加载(优于1和2方法)
public class Singleton {

    private static class Holdon{
        private static Singleton single = new Singleton();
    }

    private Singleton(){}

    public static Singleton getInstance(){
        return Holdon.single;
    }
}

3. 双重检测锁(DCL,即double-checked locking)

public class Singleton {

    private Singleton(){}

    private static volatile Singleton single;

    public static Singleton getInstance(){
        if(single == null){
            synchronized (Singleton.class){
                if(single == null){
                    single = new Singleton(); //这一语句并非原子性操作
                }
            }
        }
        return single;
    }
}

为什么必须要用 volatile 修饰 single?
single = new Singleton();这条语句在 JVM 进行了三个操作:

  • 分配内存空间给对象
  • 初始化对象
  • 把对象的内存地址赋给引用变量single

这个过程发生的顺序是无序的,当出现了以下情况就会出现问题:

  1. 线程1正常进入执行 single = new Singleton();
  2. 分配内存空间给对象
  3. 内存地址赋给single变量
  4. 线程2进入,判断此时的single不为null,返回一个未初始化的对象
  5. 线程1初始化对象

这样线程2就获取了一个不完整的对象,造成一系列错误导致最终程序崩溃
volatile关键字 有内存屏蔽的功能,可以避免这一情况的发生

4. 枚举实现单例

public enum Singleton(){
	INSTANCE;
	public void whateverMethod(){
	}
}
【Java设计模式】Java设计模式之(一)单例模式(Singleton Pattern) 本文继续介绍23种设计模式详解系列之单例模式。 一、单例模式的定义 指一个类只有一个实例,且该类能自行创建这个实例的一种模式。 二、单例模式的常见例子 Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误;在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程序的日志对象、数据库的连接池、网站的计数器、Web 应用的配置对象、应用程序中 阅读详情

相关推荐

Java中的设计模式 - 单例模式

Java中的设计模式 - 单例模式单例模式是Java设计模式中一个很常用的设计模式它非常简单,但是也还是有一些值得注意的点经常被我们忽略// 编写Run接口 public interface Run { public void run(); }编写实现 /** * @author Created by 谭健 2017年7月2日 16:21:41 * 单例模式的设计 * 1- 类只能

简简单单Onlinezuozuo 1万+

详解Java设计模式之单例模式(Singleton Pattern)

单例模式只包含一个 Singleton(单例角色)类,在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()工厂方法,让客户可以使用它的唯一实例。

Elegance never goes out of fashion 2745

子网划分详解

还不会子网划分?看这篇就够了,保姆级教程

m0_47584619的博客 6093

彻底搞懂设计模式DesignPattern-单例模式-java.lang.Runtime看单例懒汉式

参考 炸斯特 - JAVA设计模式之单例模式 简介 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法)。 比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建 Session 对象。SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式。 特点 java中单例模式是一种常见的设计模式,

Ping 365

CentOS7下NFS共享报错RPC问题的3种解决方案(含防火墙配置详解)

本文详细解析了CentOS7下NFS共享报错RPC问题的3种解决方案,包括防火墙配置详解。从基础连通性检查到RPC服务状态验证,再到精准开放必要端口和SELinux集成,提供全面的排查与解决指南,帮助用户快速解决'No route to host'等常见问题。

weixin_29274969的博客 452

技术指南| 叶绿体基因组高级分析全流程解析

本文详细解析了叶绿体基因组高级分析的全流程,包括实验设计、序列组装与注释、比较基因组分析、选择压力与功能进化等关键步骤。通过实战案例和技术技巧,帮助研究者掌握叶绿体基因组分析的核心方法,提升植物进化研究和系统学分析的效率与准确性。

weixin_33725239的博客 491

Java 设计模式 二 单例模式 (Singleton Pattern)

单例模式是一种非常常见且有用的设计模式,能够确保类只有一个实例,并且提供全局访问点。在 Java 中,推荐使用静态内部类单例模式和枚举单例模式,这两种方式在性能、线程安全性和代码简洁性上都非常优秀。

空 1307

手把手教你用二茂铁催化剂搞定醇的动力学拆分(保姆级实验避坑指南)

本文详细介绍了使用平面手性二茂铁催化剂进行醇的动力学拆分的全流程,包括催化剂选择与制备、反应体系搭建与条件优化、实时监测与反应淬灭、产物分离与纯化等关键步骤。通过实战案例和避坑指南,帮助实验人员实现>98% ee的拆分效果,特别适合需要高光学纯度二级芳基醇或烯丙醇的研究者。

weixin_30500105的博客 435

java设计模式之单例模式(Singleton Pattern)

本文中介绍了几种实现单例的方法,主要包括饿汉、懒汉、使用静态内部类、双重校验锁、枚举等。还介绍了如何防止序列化破坏类的单例性。从单例的实现中,我们可以发现,一个简单的单例模式就能涉及到这么多知识。在不断完善的过程中可以了解并运用到更多的知识。所谓学无止境。

白话机器学习 261

Ansys Zemax | 多模光纤耦合效率优化与IMAE操作数实战解析

本文详细解析了在Ansys Zemax(OpticStudio)中优化多模光纤耦合效率的实战流程。通过几何图像分析诊断初始效率,并重点介绍了如何利用IMAE操作数将分析工具转化为自动化优化引擎,实现从2%到54%的几何效率飞跃。文章还探讨了引入菲涅尔损耗与偏振计算以逼近真实效率,并分享了关键的避坑指南与高阶技巧。

xk7n92h3p5m的博客 749

【五分钟论文笔记】Vision Banana:图像生成器成为通用视觉学习器

图像生成训练可以像 LLM 预训练一样,让模型学习强大且通用的视觉表示感知即生成——将视觉任务输出参数化为 RGB 图像,是一种优雅且强大的统一框架视觉理解能力可以在不牺牲生成能力的情况下获得——两者可以共存于同一个模型。

专注:太空算力、AI infra、异构调度、大模型成本工程 232

Java常用设计模式-单例模式(Singleton Pattern)

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式 特点: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例 懒汉式: package com.example; /** * 懒汉式 * 加锁 synchronized线程安全 */ public class Stu...

gang_luo的博客 433

vue3中使用antv-S2表格(基础功能版)

表格的数值默认会渲染排序 icon, 可以配置 showDefaultHeaderActionIcon关闭。当配置为对象时,always 控制是否在子维度不足 2 个时始终展示小计,默认不展示。首先创建一个vue3+vite+ts项目,可以查看下面相关文章,只看第一条即可。可以调整行宽、列宽、列排序、单个单元格详情展示、选中某列、某行等基本功能。可以通过上面设置的SUM函数自动计算出数值,也可以自定义累加函数。配置自定义方法优先级大于配置聚合方式,即配置。1、在项目中安装(npm/pnpm都可以)

蜗牛~~ 2210

java设计模式之单例模式(Singleton pattern)

java设计模式之单例模式(Singleton pattern) 单例模式的定义: Singleton pattern restricts the instantiation of a class and ensures that only one instance of the class exists in the java virtual machine. The singlet

nobody 2249

基于Spring Boot 3 + Vue 3 + Vite的现代化社区订餐系统设计与实现

本文将详细阐述系统的整体架构、数据库设计、核心功能模块(用户管理、餐厅管理、菜品浏览、购物车、订单管理)的实现细节,并提供关键代码示例。<el-input v-model="loginForm.password" type="password" placeholder="密码" prefix-icon="Lock" show-password />.requestMatchers("/api/auth/**", "/api/dishes/public/**").permitAll() // 公开接口。

2201_76125393的博客 468

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JAVA设计模式——单例模式八种方式

目录 单例模式简介: 应用场景: 单例设计模式的八种方式: 1、饿汉式(静态常量) 2、饿汉式(静态代码块) 3、懒汉式(线程不安全) 4、懒汉式(线程安全,同步方法) 5、懒汉式(线程安全,同步代码块) 6、双重检查(推荐使用) 7、静态内部类(推荐使用) 8、枚举(推荐使用) 单例模式在JDK应用的源码分析 单例模式注意事项和细节说明 单例模式简介: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供

龍弟-idea的博客 7110

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Java】设计模式之单例模式(Singleton Pattern)

 单例模式是 Java 众多设计模式的一种,也是平时用到较多、适用范围较广的一种设计模式,隶属创建型模式。 什么设计模式?说白了就是问题的解决方案,计算1加到100可以每个数字逐个加,也可以像高斯一样首尾相加乘50,设计模式是对问题的一种优秀的解决方案,所以我们需要来看看单例模式这个答案出现之前,所存在的问题: 假设有一个类 它的对象需要被频繁的使用,所以经常需要创建与销毁,而恰...

Decmoon的博客 348

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

JAVA23种设计模式之单例模式(Singleton Pattern)

单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 介绍 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决:一个

fuu123f的博客 221

Java设计模式—单例模式(Singleton Pattern)

单例模式(Singleton Pattern)是一种创建型设计模式,一种非常非常常用的设计模式。它保证一个类仅有一个实例,并提供一个访问它的全局访问点;饿汉式:类加载时就创建了对象实例,因此线程安全,但会造成资源浪费;懒汉式:只有在需要时才创建对象实例,节省了系统资源,但需要考虑线程安全问题;双重校验锁:在懒汉式的基础上加入双重校验,保证了线程的安全且减少了锁的“竞争”;饿汉式:类加载时创建对象实例。懒汉式:只有在需要的时候才创建对象实例。

是个非常热爱生活、乐观、奋斗、努力的逗比青年 712

java23种设计模式之一: 单例模式(Singleton Pattern)

单例模式(Singleton Pattern)是设计模式中比较常用的一种,下面来总结单例模式的知识,包括: 1、理解什么是单例模式、单例模式有什么优点/缺点、单例模式的应用场景; 2、再来看看Java单例模式的6种代码实现方式、每种实现方式有什么需要注意的; 3、后面再来了解Java单例模式其他值得关注的地方,如比较静态方法、以及Java反...

255

【Java设计模式】之 单例模式(Singleton Pattern)模式 饿汉式单例模式 vs 懒汉式单例模式

什么是设计模式? 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模免去我们自己再思考和摸索,设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,"套路”。 设计模式的分类: ① 创建型模式(5种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 ② 结构型模式(7种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 ③ 行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、

weixin_46081857的博客 418

Java 设计模式 - 单例模式

Java 设计模式 - 单例模式 作者: 霍英俊 [huo920@live.com] 文章目录Java 设计模式 - 单例模式单例设计模式介绍单例设计模式八种方式饿汉式 - 静态常量饿汉式(静态常量)应用实例优缺点说明饿汉式 - 静态代码块饿汉式(静态代码块)应用实例优缺点说明懒汉式 - 线程不安全懒汉式线程不安全应用实例优缺点说明懒汉式 - 线程安全,同步方法懒汉式线程安全,同步方法应用实例优缺点说明懒汉式 - 线程安全,同步代码块懒汉式 线程安全,同步代码块应用实例优缺点说明懒汉式 - 双重检查 - 推

霍英俊 1735

Java设计模式之单例模式

单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 简介 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

weixin_46186831的博客 153

【Java设计模式】——单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

weixin_46437504的博客 268

23种设计模式 Java 单例模式

设计模式分类 创建型模式 用于描述“怎样创建对象”,它的主要特点是将对象的创建与使用分离 GoF (四人组) 书中提供了单例,原型,工厂方法,抽象工厂,建造者等 5种创建型模式 单例设计模式 单例模式概念 单例模式 是JAVA 中最简单的设计模式之一 这种类型的设计模式属于创建型模式 他提供了一种创建对的最佳方式 这种模式设计一个单一的类 该类负责创建自己的对象 用时确保只有单个对象被创建 这个类提供了一种访问其唯一的对象的方式。 单例模式的实现 饿汉式 饿汉式:类加载就是导致该单实例对象被创建 类加载的时

m0_46937429的博客 1217

Java设计模式——单例模式

介绍Java设计模式的八种单例模式

m0_62946761的博客 7270
上一篇: Java基础-复习12-多线程
下一篇: MySQL-my.ini配置
codfishXY
博客等级 码龄9年 25粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值