【单例深思】静态内部类实现详解

86、机器人混合规划技术:融合深思与反应算法 本文探讨了机器人运动规划中深思算法与反应算法的融合技术。深思算法擅长在静态环境中规划最优完整轨迹,而反应算法能快速响应动态障碍物,二者互补性强。通过将深思轨迹的最后可见点作为子目标或采用固定距离设置子目标等融合策略,机器人可在保证路径最优性的同时具备良好的实时避障能力。文章还分析了不同融合架构的工作流程,并结合室内服务机器人和自动驾驶汽车的实际案例,展示了该技术在复杂环境中的应用价值。未来,随着场景复杂度提升,混合规划技术将在智能导航中发挥更大作用。 阅读详情
静态内部类实现是我个人比较推荐的,其实现如下:

public class Singleton {
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
    private Singleton() {}
    public static final Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
 
上面实现中,通过声明一个静态内部类 SingletonHolder  来持有单例  INSTANCE   ,在 getInstance() 方法中返回该实例。

我们知道,静态内部类与非静态内部类之间有很大的区别,非静态内部类在编译完成之后会隐含地保存着一个 指向创建它的外围类的 引用,但是静态内部类却没有。这意味着 静态内部类 的创建是不需要依赖于外围类, 它不能使用任何外围类的非static成员变量和方法,某种程度上来说,静态内部类可以当成是一个独立的类。它的初始化和外部类初始化无关。

下面详细介绍一下它是如何解决单例中的各种问题的。

首先,它是如何实现延迟加载的?

由于 INSTANCE  在静态内部类中声明并实例化,在 【单例深思】饿汉式与类加载 中我们知道有且只有5种情况 会引发初始化操作, 初始化阶段是执行类构造器<clinit>()  方法的过程。 <clinit>()  方法是由编译器自动收集类中的所有类变量(static)的赋值动作和静态语句块(static{})块中的语句合并产生的。因为外部类初始化 不会引发静态内部类 SingletonHolder 的初始化,所以只有真正调用 getInstance() 方法,执行  SingletonHolder. INSTANCE  时,才会引发静态内部类初始化,从而完成实例化。所以,静态内部类实现是延迟加载的。


它如何保证实例化时线程安全?

既然静态内部类初始化可以当成为一个普通类的初始化,根据 在 【单例深思】饿汉式与类加载 中所描述的类加载过程,可以知道 虚拟机会保证一个类的 <clinit>() 方法在多线程环境中被正确的加锁、同步。所以, 静态内部类实现是在 实例化时是线程安全 。

在其他方面,由于在读取实例的时候不会进行同步,所以没有性能缺陷;没有使用  volatile ,也不依赖 JDK 版本。

总之,静态内部类实现单例由于编写简单,满足线程安全和延迟加载,无其他明显缺点,是一种在工作中用的比较多的方式。

深入掌握Java内部类核心特性与应用实战 内部类不是炫技,而是一种深思熟虑后的架构选择。它的核心价值在于:强化封装:将实现细节隐藏在外部类内部,防止滥用;提升内聚:相关功能集中管理,逻辑更清晰;简化通信:无需显式传参即可共享状态;灵活组织:通过不同类型的内部类满足多样化需求。但也要清醒认识到:- 非静态内部类会增加内存开销和 GC 压力;- 匿名类可能导致内存泄漏;- Lambda 和 record 正在逐步替代部分传统用法。 阅读详情

相关推荐

Java静态内部类实现单例过程

主要介绍了Java静态内部类实现单例过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

c++静态类实现

c++静态类 静态类 静态类实现 静态类声明

lendq的Blog 3万+

王道考研操作系统笔记(第一章)附:王道考研408所有PPT和思维导图

学习感想 别人的笔记对你的学习基本上没有用处,容易培养人的惰性,如需ppt和思维导图请拉到最后,有github链接 记笔记并不是一件浪费时间的事情,还有利于多次学习 真心希望大家在学习的过程中记笔记 操作系统 第一章 计算机系统概述 1.1 操作系统 1.1.1 操作系统的概念和功能 概念 操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软

qq_41732756的博客 1万+

java静态内部类单例模式_单例模式-静态内部类实现及原理剖析

以我的经验为例(如有不对欢迎指正),在生产过程中,经常会遇到下面两种情况:1.封装的某个类不包含具有具体业务含义的类成员变量,是对业务动作的封装,如MVC中的各层(HTTPRequest对象以Threadlocal方式传递进来的)。2.某个类具有全局意义,一旦实例化为对象则对象可被全局使用。如某个类封装了全球的地理位置信息及获取某位置信息的方法(不考虑地球爆炸,板块移动),信息不会变动且可被全局使...

weixin_36015177的博客 1317

【RDMA】13. RDMA之用户态与内核态交互

原文:https://zhuanlan.zhihu.com/p/346708569 在“RDMA之Verbs”一文中我们说道,Verbs API分为用户态和内核态,分别以ibv_和ib_作为前缀。RDMA技术的最大的优势就在于用户态可以绕过内核,直接控制硬件收发数据,减少了系统调用和内存拷贝次数,所以大部分的RDMA应用都是用户态应用,即使用以ibv_为前缀的用户态Verbs API。 但是并非所有的用户态Verbs API都可以完全绕开内核,本文中我来讲解一下哪些API依赖于内核RDMA子系统(包括驱

我的笔记本 4285

最新Python爬虫实战(入门爬虫篇)——案例18:某气象局全国天气预报数据采集(详细爬虫思路截图 + 抓包动图演示+完整爬虫代码+详细注释)

本次案例针对某气象局天气预报网的静态HTML页面,实现了全国各地区天气数据的全自动化爬取,和之前案例17的动态接口爬虫不同,本次案例聚焦于静态页面的爬虫实现,覆盖了从抓包分析、请求模拟、数据解析到数据存储的完整爬虫流程,非常适合入门学习者巩固基础,核心知识点和实现要点总结如下:首先是页面分析的核心逻辑,静态HTML页面的数据爬取,核心在于通过浏览器开发者工具,完成完整的抓包分析和标签结构定位。

努力让自己发光,对的人才能迎着光而来 27万+

静态内部类实现单例

饿汉式单例类不能实现延迟加载,不管将来用不用始终占据内存,懒汉式单例类线程安全控制烦琐,而且性能受影响 静态内部类实现单例模式就可以克服以上两种单例模式的缺点,如下所示???? public class Singleton { private static class HolderClass{ private static final Singleton instance = new Singleton(); } public static Singl

Smartbbbb的博客 4435

实战篇(七):使用Processing和PixelFlow库创建交互式流体太极动画

类:用于配置流体运动的参数,比如圆的位置、半径、运动的角度和速度以及颜色等。类:实现了接口,用于更新流体物理仿真的状态,同时整合声音输入作为流体动态变化的一部分。my_update方法:是流体物理仿真更新的核心,它计算流体粒子的速度和位置,并且将这些数据传递给流体库来模拟流动。现在,让我们进一步分析并解释每个部分的作用以及如何操作。float x;// 圆心位置xfloat y;// 圆心位置y// 半径// 是否是顺时针// 圆周运动,弧上的点位置,以及上一帧的点位置// 角度。

帅小柏的博客 1633

单例模式详解

概述单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,使用单例模式的类只有一个对象实例。单例应用场景Windows系统的任务管理器。Windows系统的回收站。操作系统的文件系统,一个操作系统只能有一个文件系统。数据库连接池的设计与实现。多线程的线程池设计与实现。Spring中创建的Bean实例默认都是单例。Java-Web中,一个Ser...

程序员囧辉 5525

量子化学仿真软件:VASP_(9).磁性材料计算

在量子化学仿真软件 VASP 中,磁性材料的计算是一个复杂但重要的过程。通过正确设置磁性状态、分析磁性性质、优化计算参数以及研究磁性相变和磁动力学,可以更准确地描述和预测磁性材料的性能。希望本节的内容能够为研究磁性材料的科研人员提供有用的参考和指导。

kkchenjj的博客 1374

详解YOLOv5网络结构/数据集获取/环境搭建/训练/推理/验证/导出/部署

本文给大家带来的教程是利用YOLOv5训练自己的数据集,以及有关YOLOv5的网络结构讲解/数据集获取/环境搭建/训练/推理/验证/导出/部署相关的教程,同时通过示例的方式让大家来了解具体的操作流程,过程中还分享给大家一些好用的资源,我还对其中的参数进行了详细的讲解,通过本文大家可以成功训练自己的数据集,在开始之前给大家推荐一下我的YOLOv5专栏,本专栏包含上百种YOLOv5的改进机制以及如何撰写论文的教程,手把手教大家如何改进YOLOv5非常适合科研小白。

Snu77的博客 4898

静态内部类单例

静态内部类单例

逐梦苍穹的博客 4168

AutoSAR配置与实践(深入篇)5.4 OS原理(下 )- 内存保护(MPU)

ECU可能由内部模块、第三方模块等各模块集成的。需求对每个模块所定义的安全等级可能有差异,需要考虑不同安全等级的模块和代码间减少相互干扰,防止程序错误传播。可以理解为包含Task、Alarm、Counter、Schedule table、ISRs、Event等基本对象的容器,用于隔离Task/Alarm等,进行内存保护。

nihaoljq2010的博客 3534

【单例深思】单例与序列化

在前面的文章中提到,序列化会破坏单例模式,下面用静态内部类的实现方式,说明序列化对单例的影响: public class Singleton implements Serializable{     private static class SingletonHolder {         private static final Singleton INSTANCE = ne

InkGenius 1397

华为OD机试真题 新系统 2026-04-26 Python&JS 实现【最大化游戏试玩资格分发】

新研发了一台游戏设备可以面向用户接受试玩。现有 n 个试玩申请,每个试玩有开始时间和结束时间。作为协调员,为了能让更多人体验到游戏,你需要对试玩申请进行选择,使得:

MISAYAONE的博客 289

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【单例深思】饿汉式

1、抛出问题 为什么饿汉式单例是线程安全的? 为什么饿汉式单例没有延迟加载(Lazy Loading)? 2、JVM类加载机制 饿汉式单例的实现: public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() {} public static Singleton getInstance() {

何武昭的专栏 268

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Design pattern ——singleton pattern(单例总结深思)

Talk is cheapShowmethecode 个人学习笔记--仅供参考 单例模式可以保证内存里只有一个实例,减少了内存开销;可以避免对资源的多重占用。 单例模式看起来非常简单,实现起来其实也非常简单。 总结一下, 前几章主要讲了 饿汉式: 1,经典饿汉式 2静态代码块饿汉式 优点:没有加任何的锁、执行效率比较高,在用户体验上来说,比懒汉式更好。 缺点:类加载的时候就...

xuedengyong的博客 155

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【单例深思】饿汉式与类加载

我们知道饿汉式的实现是线程安全的,没有延迟加载(Lazy Loading),下面我们深入研究下为什么。 饿汉式的实现如下: public class Singleton {     private static Singleton singleton = new Singleton();     private Singleton() {}     public st

InkGenius 4574

【单例深思】Java 单例模式全解

什么是单例模式? 单例模式 是一种对象创建模式,它用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例,并提供一个访问它的全局访问点。 单例模式的用途? 用于创建只需要一个实例的场景。 怎么实现单例模式? 单例模式的实现中有几个共同特点: 使用 private 声明类构造函数,这样就不能通过new 声明这个

InkGenius 843

【java 基础】枚举深思之反编译枚举类,验证枚举实现单例是线程安全的

1、

李光 未来科技 445

Chromium 源码剖析:base::NoDestructor——更安全的静态单例解决方案

Chromium源码中广泛使用base::NoDestructor类来实现单例模式,它通过不调用析构函数的方式解决传统静态局部变量在程序退出时的析构顺序问题。文章分析了传统单例实现可能导致"静态析构顺序崩溃"的隐患,详细介绍了NoDestructor的设计原理:使用placement new构造对象但不调用析构函数,依赖操作系统回收内存。该方案适用于进程级单例、全局配置等场景,但不适合需要显式释放资源的对象。相比旧版LazyInstance,NoDestructor具有更简洁、内存开销更

John_ToStr的博客 477

Java 设计模式心法之第4篇 - 单例 (Singleton) 的正确打开方式与避坑指南

这是单例模式的首要目标。它通过特定的类结构设计(最关键的是私有化构造方法private),阻止了外部代码像普通类一样随心所欲地使用new来创建实例,从而保证在整个 JVM 进程中,该类最多只存在一个对象实例。实例的创建权被牢牢控制在类自身手中。在确保实例唯一之后,还需要提供一个公开、便捷的方式让系统的其他部分能够获取到这个唯一的实例。这通常通过在该类内部定义一个公共的 (public) 静态的 (static) 方法来实现,约定俗成的名称是。它如同这个唯一实例的“官方指定联系方式”。

码觉客的博客 661

【单例深思】懒汉式改进版与内置锁

我们知道懒汉式的实现是延迟加载(Lazy Loading),但是不是线程安全的,下面我们深入研究下为什么。 懒汉式的实现如下: public class Singleton {     private static Singleton singleton;     private Singleton(){}     public s

InkGenius 1501

深思iOS应用加固方案

方案简介 深思iOS应用加固方案(VirboxProtector)基于虚拟机保护技术,无需启用 Bitcode,无需替换 Xcode 编译器,可以从可执行文件中直接解析出 ARM 指令,然后进行代码混淆和虚拟化。专业的加固技术,为应用本身及重点模块提供高强度的防护,有效避免应用被破解、逆向、篡改等风险。 深思iOS应用加固产品功能 防逆向 采用整体和混合加固保护,并对核心逻辑代码进行虚拟化保护,有效防止攻击者使用逆向分析工具将二进制代码反编译为伪代码。 防篡改 在应用启动时,对内存进行完整性

Firshare-分享值得的分享 1202

面试题:单例,还是单例

今天表弟问道一个面试题,结果票眼一看,尽然我回答错误了。值得深思: package com.io.test; class Singleton { private static Singleton singleton = new Singleton(); public static int counter1; public static int counter2 = ...

iteye_11158的博客 258

java内部类(三,嵌套类)

主要与普通内部类作比较: 1.嵌套类是内部类的一种,只不过它是static类型的,语法上。 2.前面两篇所提到的内部类,它们内部的字段和方法和外部类都是一个层次的,所以普通的内部类不能有static的字段和方法,也不能包含嵌套类。但是嵌套类却可以拥有它们。 3.前面的文章有提到内部类之所以可以和外部类有无缝隙的衔接是因为内部类的对象在产生时就隐式的拥有了一个外部类的引用。这也是嵌套类和普

野孩子的专栏 792
上一篇: 【单例深思】双重检测锁与Java内存模型
下一篇: 【单例深思】单例与序列化
TaiSung
博客等级 码龄15年 49粉丝 132原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值