Java static+private实现单例模式
1. 单例模式介绍
在Java中单例设计模式准确来说是,类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
2. 实现思路
如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。
3. 饿汉式
class Singleton {// 1.私有化构造器。private Singleton() {}// 2.内部提供一个当前类的实例。// 4.此实例也必须静态化,private才能保证不能被外部类调用,创建对象。private static Singleton single = new Singleton();// 3.提供公共的静态的方法,返回当前类的对象。声明为public给外部类使用。public static Singleton getInstance() {return single;}
}
4. 懒汉式
class Singleton {// 1.私有化构造器。private Singleton() {}// 2.内部提供一个当前类的实例。// 4.此实例也必须静态化。private static Singleton single;// 3.提供公共的静态的方法,返回当前类的对象。声明为public给外部类使用。public static Singleton getInstance() {if(single == null) {single = new Singleton();}return single;}
}
5. 解决懒汉式线程同步问题
6. 饿汉式 vs 懒汉式
饿汉式:
- 特点: 立即加载,即随着类的加载而创建(static特点)在使用类的时候已经将对象创建完毕。
- 优点: 线程安全。
- 缺点: 当类被加载的时候,会初始化static的实例,静态变量被创建并分配内存空间,从这以后,这个static的实例便一直占着这块内存,直到类被卸载时,静态变量被摧毁,并释放所占有的内存。因此在某些特定条件下会耗费内存。
懒汉式:
- 特点: 延迟加载,即在调用静态方法时实例才被创建。
- 优点: 当类被加载的时候,static的实例未被创建并分配内存空间,当静态方法第一次被调用时,初始化实例变量,并分配内存,因此在某些特定条件下会节约内存。
- 缺点: 在多线程环境中,这种实现方法是完全错误的,线程不安全,根本不能保证单例的唯一性。
- 因为如果多线程同时调用
getInstance()方法,此时single == null都成立,就会创建两个实例对象,违背了单例模式原则。
- 因为如果多线程同时调用
7. 单例模式的优点及应用场景
由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决。
应用场景:
- Windows的Task Manager (任务管理器)就是很典型的单例模式
- Windows的Recycle Bin (回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
- Application 也是单例的典型应用
- 应用程序的日志应用,一般都使用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只
能有一个实例去操作,否则内容不好追加。 - 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。
相关文章:
Java static+private实现单例模式
1. 单例模式介绍 在Java中单例设计模式准确来说是,类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 2. 实现思路 如果我们要让类在一个虚…...
华为OD机试 - 查找充电设备组合(Python)【2023-Q1 新题】
华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 查找充电设备组合…...
Authing 入选德勤“中国明日之星”企业榜单
近日,德勤发布“德勤中国明日之星”榜单,该项目致力于发掘和表彰蓬勃成长、持续创新、积极承担社会责任的卓越企业。该榜单1995 年创立至今,被业界誉为“全球高成长企业的标杆”。Authing 凭借在 IDaaS(身份云) 领域突…...
单片机嵌入式操作系统内核
1、前后台系统,协作式内核系统,与占先式内核系统,有什么不同呢? 记得在 21IC 上看过这样的比喻, 你(小工)在用厕所,经理在外面排第一,老板在外面排第二。 如果是前后台,不管是谁,都…...
C语言——柔性数组
目录0. 前言1. 思维导图2. 柔性数组的特点3. 柔性数组的使用4. 柔性数组的优势5. 结语0. 前言 柔性数组是在C99标准时引入: 结构中的最后一个元素允许是未知大小的数组,这就叫柔性数组成员。 代码示例: typedef struct flexible_arr {int a…...
web人脸登录
1,需要腾讯人脸第三方 腾讯人脸第三方申请步骤 2,相关表结构设计 create database faceDB;use faceDB; -- 人脸表 create table face( fid int primary key auto_increment COMMENT 主键, face_base longtext COMMENT 图片数据 base_64编码, create_tim…...
C++数字
目录 一、什么是数字 二、定义数字 三、数学运算 四、随机数 一、什么是数字 通常,当我们需要用到数字时,我们会使用原始的数据类型,如 int、short、long、float 和 double 等等。这些用于数字的数据类型,其可能的值和数值范围…...
【python】用plotly绘制正二十面体
文章目录顶点棱实现正二十面体plotly 的 Python 软件包是一个开源的代码库,它基于 plot.js,而后者基于 d3.js。我们实际使用的则是一个对 plotly 进行封装的库,名叫 cufflinks,能让你更方便地使用 plotly 和 Pandas 数据表协同工作…...
[Datawhale][CS224W]图机器学习(五)
这里写目录标题一、Deepwalk1.1 预备知识1.2 Deepwalk介绍1.3 Embedding1.4 word2Vec 词向量,词嵌入1.5 random Walk随机游走1.6 DeepWalk 核心代码Random WalkWord2vecDeepWalk应用1.7 DeepWalk优缺点二、Node2Vec2.1 图嵌入2.2 Node2Vec优化目标顶点序列采样策略2…...
Windows部署Jar包的三种方式
文章目录1、cmd命令启动2、bat脚本启动2.1 启动jar包2.2 关闭服务3、使用WinSW3.1 重命名3.2 xml配置3.3 安装服务3.4 卸载服务3.5 启动和停止服务1、cmd命令启动 这种方式比较简单,但是窗口关闭后服务也就被杀死了,命令如下 java -jar xxx.jar2、bat脚…...
【图像分类】卷积神经网络之AlexNet网络模型结构详解
写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 1. 前言 LeNet5网络模型提出之后,卷积神经网络在很长一段时间都没有长足的发展,主要有以下两个原因: 1.1 训…...
学习动漫插画的网络班排行榜
很多小伙伴不知道动漫插画培训机构哪个好,找不到靠谱的插画班,今天给大家整理了国内动漫插画培训机构排名! 一:动漫插画培训机构排名 1、轻微课(五颗星) 主打课程有日系插画、游戏原画、古风插画、动漫漫画…...
SpringCloud第五讲 Nacos注册中心-服务注册到Nacos
1.引入依赖: 在父工程中添加spring-cloud-alibaba的管理依赖 <!-- Nacos的管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version…...
IP地理位置定位技术原理是什么
IP地理位置定位技术的原理是基于IP地址的网络通信原理和基础上的。它利用IP地址所包含的一些信息,如网络前缀和地址段,以及ISP的IP地址归属地数据库,来推测IP地址所对应的地理位置。具体来说,IP地址是由32位二进制数字组成的&…...
j-vxe-table 下拉搜索选择框数据加载过多导致前端崩溃问题
Jeeg-boot j-vxe-table 下拉搜索选择框数据加载过多导致前端崩溃问题 最近用到了Jeeg-boot j-vxe-table的组件,这组件时真J8难用,还好多BUG,想用个slot插槽也用不了,好像官方写了个基础就没怎么管了。😑 问题…...
Java国际化ResourceBundle详解
在Java开发中,ResourceBundle是一种方便地管理本地化资源的机制。它可以使得程序能够根据当前系统环境的语言和国家/地区来自动加载相应的本地化资源文件,从而避免了硬编码和减少了重复的代码。以下是使用ResourceBundle的基本步骤: 1. 准备…...
一文高端Android性能优化-总结篇
以下从几个方面来总结一下Android的性能优化:1:界面卡顿优化2:内存优化3:App启动优化界面卡顿优化Android的界面为每秒60帧,即必须在16ms内完成1帧的绘制,如果某个方法耗时过程,导致16ms内无法完…...
深入讲解CFS组调度!(上)
注:本文缩写说明 一、CFS组调度简介 1.1. 存在的原因 总结来说是希望不同分组的任务在高负载下能分配可控比例的CPU资源。为什么会有这个需求呢,比如多用户计算机系统每个用户的所有任务划分到一个分组中,A用户90个相同任务,而B…...
大数据实操项目分享:餐饮智能推荐服务在线实习项目
项目背景:在“互联网"背景下,餐饮企业的经营方式发生了很大的变革:团购和020拓宽了销售 渠道,电子点餐、店内WIFI等信息技术提升了服务水平,大数据、私人定制更好地满足了细分市场的需求等。但是与此同时…...
代码随想录day38
动态规划五部曲 确定dp数组以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 509. 斐波那契数 https://leetcode.cn/problems/fibonacci-number/ class Solution {public int fib(int n) {if(n0) return 0;if(n<3) return 1;int[] dp new int[n]…...
效率提升秘籍:用快马AI自动生成openclaw一键部署与依赖管理脚本
最近在折腾openclaw框架时,发现环境配置真是个效率黑洞。每次在新设备上部署,光是查文档、解决依赖冲突就要花掉大半天。于是琢磨着用自动化工具来优化这个流程,没想到效果出奇的好,今天就把这套方案分享给大家。 环境配置分析器&…...
Carsim+Simulink 线控制动系统BBW-EMB联合仿真模型 !BBW-EMB线控制动联合仿真|Carsim+Simulink】
CarsimSimulink 线控制动系统BBW-EMB联合仿真模型 !BBW-EMB线控制动联合仿真|CarsimSimulink】 ✨ 核心仿真配置 ✅ 完整系统架构:包含制动力分配功能四个车轮独立线控制动机构,贴合真实线控制动系统结构; ✅ 精准控制…...
大模型剪枝(二)Wanda实战:如何在不重训练的情况下高效压缩LLM
1. Wanda剪枝方法的核心原理 Wanda方法的创新点在于它巧妙地结合了权重幅度和输入激活信息来决定剪枝策略。传统的大模型剪枝往往只关注权重本身的绝对值大小,而忽略了这些权重在实际推理过程中所起的作用。这就好比修剪果树时只根据树枝粗细做决定,却不…...
Anaconda3 2025 面向数据科学安装教程:详细步骤+自定义路径+Navigator启动)
其包含了conda、Python等180多个科学包及其依赖项。Anaconda可以看做Python的一个集成安装,它不仅免去了许多复杂的环境搭建,还内置了许多使用的Python工具 一、安装准备 安装包下载:https://pan.xunlei.com/s/VOpVUmfa4taHwZ-gAYIVqvCuA1?…...
思源宋体CN:零成本打造专业中文排版的7个实用技巧
思源宋体CN:零成本打造专业中文排版的7个实用技巧 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业字体授权费发愁吗?想找一款既专业又免费的中文字体…...
艺术二维码生成工具实战指南:从技术实现到商业价值挖掘
艺术二维码生成工具实战指南:从技术实现到商业价值挖掘 【免费下载链接】control_v1p_sd15_qrcode_monster 项目地址: https://ai.gitcode.com/hf_mirrors/monster-labs/control_v1p_sd15_qrcode_monster 核心要点 解决传统二维码设计与功能性矛盾的完整技…...
如何彻底解决微信QQ消息撤回难题?3步打造终极防撤回方案
如何彻底解决微信QQ消息撤回难题?3步打造终极防撤回方案 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.…...
解锁3大维度:Helix Toolkit如何重构.NET开发者的3D开发体验
解锁3大维度:Helix Toolkit如何重构.NET开发者的3D开发体验 【免费下载链接】helix-toolkit Helix Toolkit is a collection of 3D components for .NET. 项目地址: https://gitcode.com/gh_mirrors/he/helix-toolkit Helix Toolkit是一套功能完备的.NET 3D组…...
【Python并发成本控制终极指南】:GIL移除后3大无锁模型选型公式与ROI量化对比表
第一章:Python无锁GIL环境下的并发成本控制全景图Python 的全局解释器锁(GIL)长期被视为多线程 CPU 密集型任务的性能瓶颈。然而,随着 CPython 3.13 引入实验性无锁 GIL(--without-pymalloc 配合 --with-experimental-…...
Tsuru平台终极选型指南:如何选择最适合你的PaaS解决方案
Tsuru平台终极选型指南:如何选择最适合你的PaaS解决方案 【免费下载链接】tsuru Open source and extensible Platform as a Service (PaaS). 项目地址: https://gitcode.com/gh_mirrors/ts/tsuru 在当今快速发展的云原生时代,选择合适的PaaS平台…...
