当前位置: 首页 > news >正文

单例模式浅析

程序中仅存在一个对象实例,避免重复构建浪费资源。

1.饿汉式

主要分为3步:1.构造方法私有化 2.内部创建静态实例化对象 3.提供公有静态方法,返回对象实例

public class SingleTon {
//    构造方法私有化private SingleTon(){}
//    内部创建静态实例化对象private final static SingleTon instance=new SingleTon();
//    提供公有静态方法,返回对象实例public static SingleTon getInstance(){return instance;}
}

缺点:在类加载的时候就会创建内部实例化对象,如果没有使用过这个实例,会造成内存的浪费。

2.懒汉式

只有在调用getInstance()时,才创建实例化对象。

public class SingleTon {
//    构造方法私有化private SingleTon(){}
//    内部创建静态实例化对象private static SingleTon instance;
//    提供公有静态方法,返回对象实例public static  SingleTon getInstance(){if(instance==null){instance=new SingleTon();}return instance;}
}

缺点:存在线程安全问题,可能有多个线程同时进入if判断,构建了多个实例。

3.双重检查

1.实例变量加入volatile关键字,保证多个线程能够看到相同的实例。2.双重检查

public class SingleTon {
//    构造方法私有化private SingleTon(){}
//    内部创建静态实例化对象private static volatile SingleTon instance;
//    提供公有静态方法,返回对象实例public static  SingleTon getInstance(){if(instance==null){synchronized (SingleTon.class){if(instance==null){instance=new SingleTon();}}}return instance;}
}

这样既避免了效率问题(方法上加入synchronized),同时也避免了内存泄漏问题,推荐使用。

4.静态内部类

利用静态内部类的两点特性:1.静态内部类不会在外部类装载时被装载。2.静态内部类只会被装载一次,且不会有线程安全问题。

class SingleTon {//构造器私有化private SingleTon(){}//静态内部类,类中有一个静态属性SingleTonprivate static class SingletonInstance{private static SingleTon instance=new SingleTon();}public static SingleTon getInstance(){return SingletonInstance.instance;}
}

推荐使用。

5.使用枚举

public enum SingleTon3{instance;public void say(){System.out.println("hello");}
}

effective java作者推荐的单例模式实现。

相关文章:

单例模式浅析

程序中仅存在一个对象实例,避免重复构建浪费资源。 1.饿汉式 主要分为3步:1.构造方法私有化 2.内部创建静态实例化对象 3.提供公有静态方法,返回对象实例 public class SingleTon { // 构造方法私有化private SingleTon(){} // 内部…...

Springboot引入mybatis-plus及操作mysql的json字段

springboot引入mybatis-plus&#xff0c;创建springboot项目省略 pom文件 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3.4</version></dependency> <!…...

springboot读取application.properties中文乱码问题

目录 1 前言&#xff1a; 2 本地环境中的解决方案&#xff08;以idea为例&#xff09; 3 全部解决方案 1 前言&#xff1a; 初用properties,读取java properties文件的时候如果value是中文&#xff0c;会出现乱码的问题。我们首先需要明了乱码问题的根源。在 Java 中&#x…...

SAML- 安全断言标记语言

一、概念 安全断言标记语言&#xff08;SAML&#xff09;是一种开放标准&#xff0c;用于在各方之间&#xff08;特别是身份提供商和服务提供商之间&#xff09;交换身份验证和授权数据。SAML 是一种基于XML的安全断言标记语言&#xff08;服务提供商用来做出访问控制决策的语句…...

【佳学基因检测】Node.js中http模块的使用

【佳学基因检测】Node.js中http模块的使用 先看代码&#xff1a; http.createServer(function (req, res) {res.writeHead(200, {Content-Type: text/html});res.end(测基因&#xff0c;阻遗传&#xff0c;就在佳学基因干&#xff08;http://www.jiaxujiyin.com)!); }).liste…...

前端基础之JavaScript

JavaScript是一种能够在网页上添加交互效果的脚本语言&#xff0c;也被称为客户端语言。它可以在网页中操作HTML元素、改变CSS样式&#xff0c;以及处理用户的交互事件等。 以下是JavaScript的常见基础知识点&#xff1a; 变量和数据类型&#xff1a;JavaScript中的变量可以存…...

[GDOUCTF 2023]<ez_ze> SSTI 过滤数字 大括号{等

SSTI模板注入-中括号、args、下划线、单双引号、os、request、花括号、数字被过滤绕过&#xff08;ctfshow web入门370&#xff09;-CSDN博客 ssti板块注入 正好不会 {%%}的内容 学习一下 经过测试 发现过滤了 {{}} 那么我们就开始吧 我们可以通过这个语句来查询是否存在ss…...

C/C++奇数求和 2021年3月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C奇数求和 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C奇数求和 2021年3月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 计算非负整数 m 到 n&#xff08;包括m 和 n &#xff…...

Android APT的使用

Apt 介绍 APT(Annotation Processing Tool)是一种处理注释的工具,它对源代码文件进行检测找出其中的 Annotation&#xff0c;根据注解自动生成代码。 Annotation 处理器在处理 Annotation 时可以根据源文件中的 Annotation 生成额外的源文件和其它的文件(文件具体内容由 Annot…...

【刷题宝典NO.0】

目录 素数的判定 打印素数 打印水仙花数 百钱买百坤 输出闰年 逆序打印一个整数的每一位 输出乘法口诀表 数字9出现的次数 二进制1的个数 输出一个整数的偶数位和奇数位的二进制序列 求两个整数的最大公约数 求两个整数的最小公倍数 小乐乐与欧几里得 小…...

MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)

目录 介绍 特点 基本语法 创建 调用 查看 删除 示例 介绍 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合&#xff0c;调用存储过程可以简化应用开发人员的很多工作&#xff0c;减少数据在数据库和应用服务器之间的传输&#xff0c;对于提高数据处理…...

基础课15——语音标注

语音数据标注是对语音数据进行处理和分析的过程&#xff0c;目的是让人工智能系统能够理解和识别语音中的信息。这个过程包括了对语音信号的预处理、特征提取、标注等步骤。 在语音数据标注中&#xff0c;标注员需要对语音数据进行分类、切分、转写等操作&#xff0c;让人工智…...

Linux启动故障排错

Linux启动过程 开机流程、模块管理-CSDN博客 Grub三个阶段 1st stage&#xff1a;执行Grub主程序。Grub安装在MBR。由于MBR太小&#xff0c;所以与配置文件分开放1.5 stage&#xff1a;识别不同的文件系统2nd stage&#xff1a;加载Grub配置文件 /boot/grub2/grub.cfg。配置…...

全新二开游戏支付通道/话费/电网、紫水晶带云端源码

源码修复可用&#xff0c;YY业务都可用 本店所售程序只供测试研究&#xff0c;不得使用于非法用途&#xff0c;不得违反国家法律&#xff0c;不得用于进行违法行为&#xff0c;否则后果自负&#xff01;购买以后用作他用附带的一切法律责任后果都由购买者承担于本店无任何关…...

Hadoop相关知识点

文章目录 一、主要命令二、配置虚拟机2.1 设置静态ip2.2 修改主机名及映射2.3 修改映射2.4 单机模式2.5 伪分布式2.6 完全分布式 三、初识Hadoop四、三种模式的区别4.1、单机模式与伪分布式模式的区别4.2、特点4.3、配置文件的差异4.3.1、单机模式4.3.2、伪分布式模式4.3.3、完…...

Javassist讲解1(介绍,读写字节码)

Javassist讲解1&#xff08;介绍&#xff0c;读写字节码&#xff09; 介绍一、读写字节码1.如何创建新的类2.类冻结 介绍 javassist 使Java字节码操作变得简单&#xff0c;它是一个用于在Java中编辑字节码的类库&#xff1b; 它使Java程序能够在运行时定义一个新类&#xff0c;…...

【Linux】常见指令以及具体其使用场景

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;随着博主的学习&#xff0c;博主掌握的技能也越来越多&#xff0c;今天又根据最近的学习开设一个新的专栏——Linux&#xff0c;相信Linux操作系…...

后台管理(二)

1、权限控制 如果没有权限控制&#xff0c;系统的功能完全不设防&#xff0c;全部暴露在所有用户面前。用户登录以后可以使用系统中的所有功能。这是实际运行中不能接受的&#xff0c;所以权限控制系统的目标就是管理用户行为&#xff0c;保护系统功能。 1.1、 定义资源 资源就…...

反转链表II(C++解法)

题目 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1a;[1…...

记一次 logback 没有生成独立日志文件问题

背景 在新项目发布后发现日志文件并没有按照期望的方式独立开来&#xff0c;而是都写在了 application.log 文件中。 问题展示 日志文件&#xff1a; 项目引入展示&#xff1a; <include resource"paas/sendinfo/switch/client/sendinfo-paas-switch-client-log.…...

一键部署GLM-4.6V-Flash-WEB:GitCode镜像真香,省去半天环境搭建时间

一键部署GLM-4.6V-Flash-WEB&#xff1a;GitCode镜像真香&#xff0c;省去半天环境搭建时间 1. 为什么选择GLM-4.6V-Flash-WEB 在多模态大模型快速发展的今天&#xff0c;开发者最头疼的不是模型性能&#xff0c;而是如何快速部署和运行。GLM-4.6V-Flash-WEB作为智谱AI最新开…...

ChatGLM3-6B零基础部署:Streamlit重构版5分钟快速搭建本地智能助手

ChatGLM3-6B零基础部署&#xff1a;Streamlit重构版5分钟快速搭建本地智能助手 1. 引言&#xff1a;为什么你需要一个本地专属的AI助手&#xff1f; 想象一下&#xff0c;你正在写一份重要的技术报告&#xff0c;需要快速查询某个编程概念&#xff1b;或者你在分析一份长达几…...

OpenClaw会议纪要助手:Qwen3-14b_int4_awq自动生成会议摘要

OpenClaw会议纪要助手&#xff1a;Qwen3-14b_int4_awq自动生成会议摘要 1. 为什么需要自动化会议纪要 每次开完会最头疼的就是整理会议纪要。作为技术负责人&#xff0c;我每周要参加至少5场会议&#xff0c;从需求评审到技术方案讨论&#xff0c;经常一场会下来精疲力尽&…...

# 007、复杂驱动与ECU抽象:硬件深度访问与传感器执行器集成

深夜的示波器 上周三凌晨两点,产线测试报出一个诡异问题:某个车窗控制模块在低温下偶发升窗抖动。逻辑层代码检查了三遍,RTE接口确认无误,可问题就在那里——像幽灵一样时隐时现。最后把示波器探头直接钩到电机驱动芯片的引脚上,才发现是MOSFET栅极驱动波形在低温下出现了…...

DirectDraw兼容性新纪元:让经典游戏在现代Windows系统重生

DirectDraw兼容性新纪元&#xff1a;让经典游戏在现代Windows系统重生 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/DD…...

【26最新大英赛】全国大学生英语竞赛高频核心词汇表pdf电子版(考前必背单词)

2026年全国大学生英语竞赛将于4月12日举行&#xff0c;倒计时6天&#xff01;帮助广大考生高效备考&#xff0c;小编精心整理了最新的大英赛核心词汇&#xff0c;PDF电子版&#xff0c;可下载打印&#xff01; 资料下载&#xff1a; 资料下载https://pan.quark.cn/s/13eaf6fb0…...

终极指南:如何为Conform.nvim贡献代码并成为开源英雄

终极指南&#xff1a;如何为Conform.nvim贡献代码并成为开源英雄 【免费下载链接】conform.nvim Lightweight yet powerful formatter plugin for Neovim 项目地址: https://gitcode.com/gh_mirrors/co/conform.nvim Conform.nvim是一款轻量级但功能强大的Neovim格式化插…...

深入解析PG332 ERNIC:基于RoCE v2的嵌入式RDMA加速引擎

1. PG332 ERNIC&#xff1a;重新定义嵌入式网络加速 第一次接触PG332 ERNIC这个IP核时&#xff0c;我正为一个工业视觉项目头疼——传统TCP/IP协议栈的延迟让机械臂控制指令总是慢半拍。直到测试了基于RoCE v2的ERNIC方案&#xff0c;端到端延迟直接从毫秒级降到微秒级&#xf…...

Linux进程(下)

上一篇文章介绍了进程的概念和进程的状态&#xff0c;但进程的知识还有很多&#xff0c;本文继续进行讲解。进程的管理指令之前提到过许多对进程进行管理的指令&#xff0c;但没有进行讲解&#xff0c;在这里统一聊聊。核心指令有四个 ps&#xff0c;top&#xff0c;kill&#…...

云原生环境中的API网关实践

云原生环境中的API网关实践 &#x1f525; 硬核开场 各位技术老铁&#xff0c;今天咱们聊聊云原生环境中的API网关实践。别跟我扯那些理论&#xff0c;直接上干货&#xff01;在微服务架构中&#xff0c;API网关是整个系统的入口&#xff0c;负责请求路由、负载均衡、安全认证等…...