Java设计模式-单例模式(二)单例模式类

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

饿汉式单例类

饿汉式单例类在加载时单例对象已经被创建。代码如下:

/**
 * 懒汉式单例
 * @Author: Rick
 * @Date: 2018/10/31 17:44
 */
public class EagerSingleton {
    private static EagerSingleton eagerSingleton = new EagerSingleton();

    private EagerSingleton(){};

    public static EagerSingleton getEagerSingleton(){
        return eagerSingleton;
    }
}

懒汉式单例类

与饿汉式单例不一样的是,懒汉式单例在第一次创建时被实例化。

使用关键字synchronized,使用线程锁,实现单例模式,代码如下:

**
 * 懒汉式单例
 * @Author: Rick
 * @Date: 2018/10/31 17:51
 */
public class LazySingleton {
    private static LazySingleton lazySingleton = null;

    private LazySingleton(){

    }
    //增加了线程锁,线程安全,但是增加了系统压力,使性能降低
   synchronized public static LazySingleton getLazySingleton() {
        if (lazySingleton == null) {
            lazySingleton = new LazySingleton();
        }
        return lazySingleton;
    }
    
}

在类上添加关键字synchronized,进行单例实现,得到了线程安全,但每次都要进行线程锁的判断,在多线程高并发的访问环境中,导致系统的性能大大降低。getLazySingleton()方法修改为:

public static LazySingleton getLazySingleton(){
        if(lazySingleton == null){
            synchronized (LazySingleton.class){
                lazySingleton = new LazySingleton();
            }
        }
        return lazySingleton;
    }

问题:这种方式不能实现单例,在第一个请求到达时,会创建对象,如果此时有第二个调用该方法,就会在线程锁外等待,当第一个请求创建对象完成后,第二个请求处于等待的状态,会再创建一个对象,所以这种写法无法实现单例。
使用双重检查锁定实现懒汉式的单例类的完整代码如下:

public static LazySingleton getLazySingleton(){
        if(lazySingleton == null){
            synchronized (LazySingleton.class){
                if(lazySingleton == null) {
                    lazySingleton = new LazySingleton();
                }
            }
        }
        return lazySingleton;
    }

静态内部类单例

饿汉式单例不能实现延迟加载,不论将来使用与否都会占用内存;懒汉式单例类线程安全控制繁琐,影响系统性能。可见无论是哪个都存在一些问题。使用静态内部类来实现单例,可以解决以上问题,代码如下:

/**
 * 内部类实现单例
 * @Author: Rick
 * @Date: 2018/10/31 18:25
 */
public class InternalSingleton {
    private InternalSingleton(){
    }

    private static class HolderClass{
        /**内部类中进行实例化*/
        private final static  InternalSingleton INTERNALSINGLETON = new InternalSingleton();
    }

    public static InternalSingleton getHolderClass() {
        return HolderClass.INTERNALSINGLETON;
    }

    public static void main(String[] args) {
        InternalSingleton internalSingleton1,internalSingleton2;
        internalSingleton1 = InternalSingleton.getHolderClass();
        internalSingleton2 = InternalSingleton.getHolderClass();

        System.out.println(internalSingleton1 == internalSingleton2);

    }
}

在windows10/11中使用ipatool提取苹果app安装包ipa文件 本文介绍了在Windows10/11系统中使用ipatool工具下载苹果App安装包(.ipa)的详细步骤。首先需准备Windows电脑、AppleID账号并下载ipatool工具;具体操作包括:登录AppleID、搜索应用、获取购买授权、查看历史版本及下载指定版本。关键步骤强调获取授权的重要性,并提供了常用命令速查表,帮助用户完成从登录到下载的全过程。该教程适用于需要获取旧版本App或进行应用测试的场景。 阅读详情

相关推荐

机器视觉避坑指南:为什么你的Halcon划痕检测总漏检?(附优化方案)

本文深入剖析了Halcon在表面划痕检测中漏检率高的常见原因,如灰度值波动、噪声干扰及形态学参数设置不当。针对复杂背景与低对比度划痕,提出了超越官方例程的多尺度纹理分析与特征融合优化方案,旨在帮助开发者构建更鲁棒、稳定的机器视觉检测流程,有效提升检出率。

weixin_29057163的博客 234

java单例模式

这种方式使用静态内部类来保存单例实例,当外部类被加载时,静态内部类不会被加载,只有调用getInstance()方法时才会加载静态内部类,从而实现懒加载的效果。这种方式使用静态内部类来保存单例实例,当外部类被加载时,静态内部类不会被加载,只有调用getInstance()方法时才会加载静态内部类,从而实现懒加载的效果。这种方式使用一个私有的静态变量来保存单例实例,通过getInstance()方法来获取单例实例,如果instance为空,则创建一个实例并返回。

wswssx的专栏 109

地质建模师必备:用Petrel快速生成浅地层TST/TVT厚度图的5个关键步骤

本文详细解析了地质建模师如何利用Petrel平台,将二维浅地层SEG-Y数据高效转化为真实地层厚度图(TST)和真实垂直厚度图(TVT)。文章系统梳理了从数据规范化导入、坐标系统一、地质界面解释到厚度计算与成图的5个关键实战步骤,并强调了误差控制与工程应用,为海上风电等工程地质评估提供了完整解决方案。

weixin_29204205的博客 518

对Java单例模式 volatile关键字作用的理解

  单例模式是程序设计中经常用到的,简单便捷的设计模式,也是很多程序猿对设计模式入门的第一节课。其中最经典的一种写法是: class Singleton { private volatile static Singleton instance;//volatile关键字防止指令重排 private Singleton(){} public static Sing...

weixin_33829657的博客 261

麒麟V10服务器多硬盘安装与分区实战:告别自动分区,手动分配/boot、swap和/根目录

本文详细介绍了麒麟V10服务器在多硬盘环境下的手动分区策略,包括/boot、swap和/根目录的优化分配方案。通过SSD与HDD混合存储架构的合理规划,提升系统性能和运维效率,适用于企业级定制化系统部署需求。

weixin_26976635的博客 407

【Android】汽车电源管理:深入解析CarPowerManager与Suspend To RAM的交互机制

本文深入解析了Android Automotive OS中CarPowerManager与Suspend To RAM(深度睡眠)的交互机制。详细阐述了从车辆发出睡眠请求,到CarPowerManagementService协调应用状态,最终通过内核进入低功耗睡眠的完整流程,并探讨了唤醒机制、开发者实践及功耗优化策略,为车机应用开发与系统优化提供关键指导。

weixin_28339967的博客 291

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

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

龍弟-idea的博客 7110

SBP依赖计算中的蝴蝶效应:一个Prefab修改如何触发全量重建?

本文深入探讨了Unity中SBP(Scriptable Build Pipeline)依赖计算的蝴蝶效应,解析了Prefab修改如何触发全量重建的机制。通过分析Asset与Object的层级关系、依赖计算的三种维度及CacheEntry系统,揭示了全量重建的根本原因,并提供了依赖可视化工具开发、优化策略与最佳实践,帮助开发者提升构建效率。

weixin_29015051的博客 444

设计模式之单例模式

本文主要介绍了设计模式的相关内容,包括设计模式的概念、常见设计模式及 GoF 设计模式的分类。重点阐述了单例模式,从其核心思想、实现方式展开,如通过对比非单例的 `Student` 类实例化结果,引出单例模式。详细介绍了饿汉式、懒汉式(线程不安全)、线程安全的懒汉式、双重检查锁、静态内部类和枚举等多种单例模式的实现方式,以代码示例及测试展示特点,分析了各实现方式的优缺点,如直接在方法上加锁的线程安全懒汉式会因频繁加锁致并发性能差,以及对性能的优化目标,还提及单例模式的应用场景及优缺点,并在最后对单例模式进行

m0_73941339的博客 1767

MRST开源油藏模拟:从入门到精通的全流程指南

本文全面介绍了MRST开源油藏模拟工具的使用方法,从环境搭建到核心功能实战,再到性能优化和工业级应用。MRST作为一款基于MATLAB的开源工具,为油藏工程师提供了强大的数值模拟能力,特别适合教学和科研场景。文章还分享了二次开发技巧和常见问题解决方案,帮助读者快速掌握油藏模拟技术。

beer8的博客 326

从0到全栈:C#/.NET/.NET Core终极学习路线——2025年开发者必修的12个阶段与30个实战项目

【代码】从0到全栈:C#/.NET/.NET Core终极学习路线——2024年开发者必修的12个阶段与30个实战项目。

墨夶的博客 2042

Java设计模式——单例模式

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

m0_62946761的博客 7270

15、z/OS 优化配置与迁移实践

本文详细探讨了z/OS环境的优化配置与迁移实践,涵盖DASD存储库管理、用户目录更新、环境更新意义以及不同场景下的迁移案例。通过单笔记本系统和服务器级机器的实例,展示了迁移流程和关键要点,包括DASD文件创建、设备映射更新、系统重启初始化以及数据备份等步骤。文章还总结了迁移过程中的注意事项,并展望了未来z/OS优化的发展趋势,为z/OS系统的稳定运行和高效管理提供了实用指导。

zzz56的博客 129

【Java设计模式】二、单例模式

没有重写readResolve方法时,会通过反射创建一个新的对象,从而破坏了单例模式。IF 这一行,被挂起,再被唤醒时继续往下执行,就会创建出两个不同的实例对象。通过流将单例对象,序列化到文件中,然后再反序列化读取出来。发现通过反序列化方式创建出来的对象内存地址,和原对象不一样,单例模式被破坏。如此,再有A、B两个线程同时执行到第一个IF,只能有一个成功创建对象,另一个获取到锁后,第二重判断会告诉它已经有对象实例了。静态内部类在被加载时,不会立即实例化,而是在第一次使用时才会被加载并初始化。

llg___的博客 1367

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

Java 设计模式 - 单例模式

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

霍英俊 1736

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

图解 java 设计模式(二)——彻底弄明白单例模式,工厂模式

1、图解 java 设计模式(二)——彻底弄明白单例模式,工厂模式 1.1、前言 大家可以去 b 站观看韩老师的视频:b站韩老师视频链接 1.2、设计模式介绍 1.2.1、基本介绍 设计模式是程序员在面对同类软件设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案,设计模式(Design Pattern)代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的时间的试验和错误总结出来的。 设计模式的本质提高 软件的维护性,通用性和扩展性,并降低软件的复杂度。 设计模式的本质提高 软

qq_42279295的博客 4526

jre9下载 jdk9

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

设计模式实战教程:基于 youngyangyang04/DesignPattern 开源项目

设计模式实战教程:基于 youngyangyang04/DesignPattern 开源项目 本教程旨在全面介绍位于 GitHub 的设计模式开源项目。通过深入浅出的讲解,我们将涵盖项目的核心要素,提供快速上手指南,展示经典应用场景,以及探索其在技术生态中的位置。 1. 项目介绍 设计模式 是软件开发中的一套成熟解决方案,用于解决常见的设计问题并促进代码的可重用性、可维护性和扩展性。此开源项目 D...

gitblog_00568的博客 1057

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

synchronized代码块使用一个对象作为锁,当一个线程进入synchronized代码块时,会尝试获取该对象的锁,如果锁被其他线程占用,则该线程被阻塞,直到锁被释放。当更新或删除数据时,如果没有及时同步所有的缓存实例,可能导致数据的不一致性,从而引发潜在的问题。在Java中,每个类都对应一个Class对象,该对象包含了有关类的结构、字段、方法等信息,可以在程序运行时通过反射机制来访问和操作类的成员。(即,在整个应用程序中,只存在该类的一个实例对象,而不是创建多个相同类型的对象),并提供。

weixin_55252589的博客 1231

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

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

空 1307

Java设计模式-创建型设计模式-单例模式

Java设计模式-创建型设计模式-单例模式

Fatter$hday的博客 1150

Java设计模式:(二)单例模式

Java设计模式:单例模式 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。 意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决: 一个全局使用的类频繁地创建与销毁。 单例模式实现步骤: 1.一个类只有一个实例 如果要做到只有一个实例那么该的的构造方法不能是public的,是private的。因为该类的构造方法如果是publi...

Lian_Easel的博客 267

【Java设计模式】创建型设计模式-单例模式(二)

单例模式适用于需要频繁创建和销毁且消耗时间较长,耗费资源过多,但又是频繁使用的对象(重量级对象)。例如:工具类对象、web开发中的必须用到的对象(servlet对象)、用于操作数据库和文件的对象(数据源对象、session工厂对象等)

古采尼的博客 865

Java单例模式(设计模式之单例模式)

1.设计模式之终极结合 最近几期博客打算主要讲一下单例模式、观察者模式、Build模式,目的是为了方便后期为大家带来RXJava+Retrofit2.0+Okhttp3结合使用的网络请求框架。 2.单例模式介绍 单例模式是我们使用的最娴熟的模式之一,也是我们App开发者必须会的模式之一。单例模式顾名思义就是在一个App/Project中一个单例对象类只存在一个实例。比如我们一个App中是不是...

IBM_Forever 1253

[Java单例模式篇] 单例设计模式的9种实现

手写单例设计模式 写在前面 我们常见的设计模式有模板方法模式、工厂模式、适配器模式、代理模式、装饰者模式、观察者模式、单例模式等,单例设计模式可以说是做简单的设计模式,本篇文章将专门针对单例设计模式进行分析实现,做到手写单例,不心慌。 有的时候我们只需要某个类只有一个对象产生,不需要更多的实例对象,那么,我们就可以考虑用单例设计模式来实现此需求。 一、单例模式的特点 (1) 一个类只允许产...

SolarL的博客 1148

Java设计模式—单例模式精讲

相信学习Java的同学们对设计模式这个概念并不陌生,不管是在学习还是在求职面试的过程中我相信大家都或多或少接触过设计模式这个字眼。不知道大家在学习SSM(Springboot-Spring-Mybatis)框架的时候会不会存在疑问,咱们一个服务至少由三部分组成,即控制层到服务层,最后就是咱们的数据层。咱们创建这些业务对象使用的是Spring的控制反转,将跟项目相关的类通过反射的方式加入到IOC容器。像咱们Controller层、Service层都很好理解,我们只需要在Spring的核心配置文件扫描对应的类,

zjjcchina的博客 268

Java设计模式之容器单例模式

Java设计模式之容器单例模式 public class ContainerSingleton { private ContainerSingleton(){} private static Map<String , Object> map=new HashMap<>(); public static void putInstance(Str...

Crook的专栏 1755
上一篇: Java设计模式-单例模式(一)单例模式实现
下一篇: 端口占用解决方法
James_JR10
博客等级 码龄9年 20粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值