[JAVAEE] 多线程的案例(一)-单例模式

目录

一. 单例模式

二. 单例模式的使用时机

三. 单例模式的关键代码

四. 单例模式的几种实现方式

4.1 饿汉方式(急)

4.2 懒汉模式(缓)

a. 解决原子性的问题 

b. 解决程序运行效率低下的问题

c. 解决指令重排序的问题(其次是为了解决内存可见性的问题) 

五. 总结


一. 单例模式

单例模式是一种设计模式, 表示单个实例(对象), 强制要求一个类中只能有一个实例


二. 单例模式的使用时机

需要控制实例数量, 节省系统资源时使用.


三. 单例模式的关键代码

构造方法必须是私有化的(private), 为了保证这个类只有一个实例.

示例(饿汉模式): 


四. 单例模式的几种实现方式

4.1 饿汉方式(急)

饿汉方式是线程安全的, 因为只涉及到赋值操作, 不涉及到修改操作.

4.2 懒汉模式(缓)

此种方式下, 懒汉模式是线程不安全的.

a. 解决原子性的问题 

最容易观察到的, 上述代码存在原子性的问题, 因为在 getSingletonLazy方法中涉及到了修改操作, 此时需要加锁解决. 

b. 解决程序运行效率低下的问题

两个线程同时启动, 一个线程获取了锁, 进行if判断之后实例化了SingletonLazy对象, 再然后解锁了. 此时另一个线程获取锁, 进行了if判断, 但是并没有实例化对象, 再然后解锁.

此时两个线程, 获取了两次锁, 会使程序的效率降低.

这时就需要两次if判断, 来提高程序的运行效率.

c. 解决指令重排序的问题(其次是为了解决内存可见性的问题) 


五. 总结

1. 单例模式就是单个实例对象, 强制要求一个类中只能存在一个实例对象. 

2. 单例模式的使用时机是: 需要控制实例数量, 节约内存资源.

3. 单例模式的关键代码: 私有化构造方法(保证一个类中只能存在一个实例对象).

4. 单例模式的几种实现方法: 饿汉模式(线程安全), 懒汉模式(现成不安全 => 解决: 双重if外加锁, 需要明白各个操作的含义).

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIP-HarmonyOS Application Developer 习题(十七)

(判断)1、对于用户创建的一些临时卡片在遇到卡片服务框架死亡重启,此时临时卡片数据在卡片管理服务中已经删除,且对应的卡片ID不会通知到提供方,所以卡片使用方需要自己负责清理长时间未刚除的临时卡片数据。 答案&…

QT:MaintenanceTool 模块安装工具

QT的MaintenanceTool 工具对已安装的 Qt 进行卸载、修复等其他操作时提示At least one valid and enabled repository required for this action to succeed 解决方式:在设置中添加一个临时的仓库 https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepositor…

6,000 个网站上的假 WordPress 插件提示用户安装恶意软件

黑客使用窃取的凭证感染 WordPress 网站,并向其发送虚假插件,通过虚假的浏览器更新提示向最终用户发送恶意软件和信息窃取程序。 该恶意活动基于ClickFix假浏览器更新恶意软件的新变种,自 2024 年 6 月以来已使用假 WordPress 插件感染了超过…

放大器和基本运放电路的公式推导

放大器和基本运放电路的公式推导 放大器全家谱运放的渊源和数学分析基本运放电路的公式推导预备知识基本特性跟随器特性比较器特性 基本运放电路反相放大器(反比例运算放大器)同相放大器(正比例运算放大器)反相加法器同相加法器减…

Python条形图 | 指标(特征)重要性图的绘制

在数据科学和机器学习的工作流程中,特征选择是一个关键步骤。通过评估每个特征对模型预测能力的影响,我们可以选择最有意义的特征(指标),从而提高模型的性能并减少过拟合。本文将介绍如何使用 Python 的 Seaborn 和 Ma…

go 使用fyne实现桌面程序的计算器例子

使用Fyne工具包构建跨平台应用是非常简单的,在此之前我们需要做一些准备功能做,比如安装一些gcc基础图形依赖库,还有go语言本身的运行开发环境都是必要的。 在此之前我们希望你是go语言的已入门用户,掌握go的协程,管道…

Linux基础知识 - C(自学使用)

1.C语言基础知识 参考博客: https://blog.csdn.net/qq_45254369/article/details/126023482?ops_request_misc%257B%2522request%255Fid%2522%253A%252277629891-A0F3-4EFC-B1AC-410093596085%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%…

Xcode文件默认存储位置-使用c++file保存文件默认路径以及设置为路径为当前项目路径

Xcode文件默认存储位置-使用cfile保存文件默认路径以及设置为路径为当前项目路径 1.概述 使用Xcode工具开发时候,遇到C调用file创建文件后,在当前项目中找不到文件路径。这是由于xcode会将文件保存到默认设置的路径。下面是查看文件默认存储路径和修改…

DC-9靶场渗透

靶机:DC-9 DC: 9 ~ VulnHub 攻击机:kail linux 2024 1,将两台虚拟机网络连接都改为NAT模式,并查看DC-9的MAC地址 2,进行主机扫描,通过MAC地址发现靶机的IP地址 攻击机IP地址192.168.23.169,靶机IP地址192.1…

MySQL-存储过程/函数/触发器

文章目录 什么是存储过程存储过程的优缺点存储过程的基本使用存储过程的创建存储过程的调用存储过程的删除存储过程的查看delimiter命令 MySQL中的变量系统变量用户变量局部变量参数 if语句case语句while循环repeat循环loop循环游标cursor捕获异常并处理存储函数触发器触发器概…

16. 虚拟化

文章目录 第16章 虚拟化16.1 共享资源16.2 虚拟机16.3 虚拟机镜像16.4 容器16.5 容器和虚拟机16.6 容器的可移植性16.7 Pod(容器组)16.8 无服务器架构16.9 小结16.10 扩展阅读16.11 问题讨论 第16章 虚拟化 “虚拟”意味着永远不知道你的下一个字节从哪里…

SpringBoot poi-tl通过模板占位符生成word文件

简介: 开发中我们需要通过在word中使用占位符来动态渲染一些数据,本文讲解poi-tl实现动态生成word文档,包括表格循环,对象嵌套。 poi-tl官网文档 Poi-tl Documentation 1. word格式 这是我的test.word 这是导出后的out.docx文件 …

UE4 材质学习笔记12(水体反射和折射)

一.水体反射和折射 首先就是要断开所有连接到根节点的线,因为水有很多不同的节点成分,当所有其他节点都在用时 要分辨出其中一个是何效果是很难的。 虚幻有五种不同的方法可以创建反射,虚幻中的大多数场景使用多种这些方法 它们会同时运作。…

ctfshow-文件上传-151-161

CTFshow文件上传 PHP文件上传:1、代码思路 黑名单是设置不能通过的用户,黑名单以外的用户都能通过。 phtml、pht、php3、php4、php5后缀都会按做php文件执行,且不在黑名单内。 2、绕过 找漏网之鱼:cer、php3、php4、phtml等。 大小写绕…

反编译华为-研究功耗联网监控日志

摘要 待机功耗中联网目前已知的盲点:App自己都不知道的push类型的被动联网、app下载场景所需时长、组播联网、路由器打醒AP。 竞品 策略 华为 灭屏使用handler定时检测(若灭屏30分钟内则周期1分钟,否则为2分钟),检…

第13次CCF CSP认证真题解

1、跳一跳 题目链接&#xff1a;https://sim.csp.thusaac.com/contest/13/problem/0 本题是小游戏“跳一跳”的模拟题&#xff0c;按照题意模拟即可。 100分代码&#xff1a; #include <iostream> using namespace std; int main(int argc, char *argv[]) {int n 30…

中国人寿财险青岛市分公司:科技保险,助力企业高质量发展

中国人寿财险青岛市分公司深知科技保险对于企业发展的重要性&#xff0c;积极将科技保险融入企业发展战略。公司利用科技手段&#xff0c;为企业提供风险评估、防灾减灾等增值服务&#xff0c;帮助企业降低经营风险。同时&#xff0c;公司还通过科技保险产品&#xff0c;为企业…

第十七周:机器学习

目录 摘要 Abstract 一、MCMC 1、马尔科夫链采样 step1 状态设定 step2 转移矩阵 step3 马尔科夫链的生成 step4 概率分布的估计 2、蒙特卡洛方法 step1 由一个分布产生随机变量 step2 用这些随机变量做实验 3、MCMC算法 4、参考文章 二、flow-based GAN 1、引…

程序员在线面试刷题神器

大家好&#xff0c;我是程序员阿药。推荐大家一款面试刷题神器&#xff01;&#xff01;&#xff01; 简介 微学时光是一款专为计算机专业学生和IT行业求职者设计的面试刷题小程序&#xff0c;它汇集了丰富的计算机面试题和知识点&#xff0c;旨在帮助用户随时随地学习和复习…

Python 应用可观测重磅上线:解决 LLM 应用落地的“最后一公里”问题

作者&#xff1a;彦鸿 背景 随着 LLM&#xff08;大语言模型&#xff09;技术的不断成熟和应用场景的不断拓展&#xff0c;越来越多的企业开始将 LLM 技术纳入自己的产品和服务中。LLM 在自然语言处理方面表现出令人印象深刻的能力。然而&#xff0c;其内部机制仍然不明确&am…