[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外加锁, 需要明白各个操作的含义).

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【大模型实战篇】大模型分词算法BPE(Byte-Pair Encoding tokenization)及代码示例

词元化是针对自然语言处理任务的数据预处理中一个重要步骤,目的是将原始文本切分成模型可以识别和处理的词元序列。在大模型训练任务中,就是作为大模型的输入。传统的自然语言处理方法,如基于条件随机场的序列标注,主要采用基于词…

Nest.js 实战 (十五):前后端分离项目部署的最佳实践

☘️ 前言 本项目是一个采用现代前端框架 Vue3 与后端 Node.js 框架 Nest.js 实现的前后端分离架构的应用。Vue3 提供了高性能的前端组件化解决方案,而 Nest.js 则利用 TypeScript 带来的类型安全和模块化优势构建了一个健壮的服务端应用。通过这种技术栈组合&…

phpstorm中使用FTP功能和自动上传配置介绍

phpstorm中使用FTP功能和自动上传配置介绍 一、引言 PHPStorm 是一款强大的 PHP IDE,它提供了许多便捷的功能来提高开发效率。其中,内置的 FTP 功能允许开发者直接在 IDE 中上传文件到服务器,而自动上传配置则可以进一步简化这一过程。本文…

ISUP协议视频平台EasyCVR私有化视频平台视频汇聚/存储系统怎么选?

一、EasyCVR视频监控存储系统的核心优势 TSINGSEE青犀EasyCVR视频汇聚平台是一个具备高度集成化、智能化的视频监控汇聚管理平台,拥有远程视频监控、录像、存储、回放、语音对讲、云台控制、告警等多项核心功能。该系统采用先进的网络传输技术,支持高清…

Servlet(三)-------Cookie和session

一.Cookie和Session Cookie和Session都是用于在Web应用中跟踪用户状态的技术。Cookie是存储在用户浏览器中的小文本文件,由服务器发送给浏览器。当用户再次访问同一网站时,浏览器会把Cookie信息发送回服务器。例如,网站可以利用Cookie记住用…

轻松掌握Win10录屏技巧:四大神器推荐!

在Win10系统中,录屏功能的应用越来越广泛,无论是用于工作演示、在线教学还是游戏分享,一款好用的录屏软件都是必不可少的。今天,我们将推荐四款录屏工具! 福昕录屏大师 直达链接:www.foxitsoftware.cn/RE…

字符串大小的比较

1.字符串中每一个字符都对应一个码值,字符串比较大小时从第一个字符开始比较出现结果时输出 如下图所示:

力扣之613.直线上的最近距离

文章目录 1. 613.直线上的最近距离1.1 题意1.2 准备数据1.3 题解1.4 结果截图 1. 613.直线上的最近距离 1.1 题意 表: Point ----------------- | Column Name | Type | ----------------- | x | int | ----------------- 在SQL中,x是该表的主键列。 …

《计算机视觉》—— 换脸

效果如下: 完整代码: import cv2 import dlib import numpy as npJAW_POINTS list(range(0, 17)) RIGHT_BROW_POINTS list(range(17, 22)) LEFT_BROW_POINTS list(range(22, 27)) NOSE_POINTS list(range(27, 35)) RIGHT_EYE_POINTS list(range(36…

PON架构(全光网络)

目前组网架构 世界上有一种最快的速度又是光,以前传统以太网络规划满足不了现在的需求。 有线网 无线网 全光网络方案 场景 全光网络分类 以太全光网络 PON(Pas-sive-Optical Network 无源光网络) 再典型的中大型高校网络中 推荐万兆入…

电脑技巧:Rufus——最佳USB启动盘制作工具指南

目录 一、功能强大,兼容性广泛 二、界面友好,操作简便 三、快速高效,高度可定制 四、安全可靠,社区活跃 在日常的电脑使用中,无论是为了安装操作系统、修复系统故障还是进行其他需要可引导媒体的任务,拥…

目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件

目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件 一、简介二、.NET Reflector的主要功能包括:1. **反编译**: 反编译是将已编译的.NET程序集(如.dll或.exe文件)转换回可读的源代码。这使得开发者可以查看和学习第三方库的实现细节&…

【分立元件】电阻的额定电压和最高电压

在文章:【分立元件】贴片电阻的额定功率中我们讲到使用电阻器时,不仅要注意额定功率,还要注意电压相关的一些项目。 本文我们将对与电阻基本参数关联的额定电压和元件最高电压这两个术语及其定义(包括它们之间的关系)进行解说。 额定电压 如下所示国巨片式电阻规…

排序算法 —— 希尔排序

目录 1.希尔排序的由来 2.希尔排序的思想 3.希尔排序的实现 实现分析 实现代码 代码优化 4.希尔排序的总结 1.希尔排序的由来 希尔排序是对直接插入排序的优化。在直接插入排序算法中,如果数据是有序or接近有序的时候,直接插入排序算法的时间复杂…

跨时钟域处理(单bit)_2024年10月21日

慢时钟域同步到快时钟域:打两拍 在快时钟域clk下对慢时钟域信号进行打两拍(亚稳态概率很低) 脉冲宽度改变,但不影响同步结果 快时钟域同步到慢时钟域(两种方法) ① 脉冲展宽同步 在快时钟域clk下对快时…

LeetCode199. 二叉树的右视图(2024秋季每日一题 47)

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 示例 2: 输入: [1,null,3] 输出: [1,3] 示例 3: 输入: [] 输出: [] 提示:…

软件压力测试如何进行?深圳软件测试机构分享

软件压力测试是每个重要软件测试工作的一部分,是一种基本的软件质量保证行为。压力测试不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行软件压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网…

Libevent源码剖析-event

1 简介 本文来重点介绍下libevent中的event事件,在类unix系统中编写网络程序时,我们经常需要处理3类事件-IO事件&signal事件&timer事件,libevent通过reactor来注册&调度&处理IO事件,并且也将signal和timer事件借助…

ESP32开发__ESP-IDF, ESP-ADF官网下载,安装及环境配置

前言 不说废话,直面“干货”。最近公司项目涉及基于 ESP32 系列芯片开发,那我们新手小白如何准备相关工作及快速入门,本篇文章旨在:介绍ESP32,指导用户搭建 ESP32 硬件开发的软件环境( ESP-IDF V5.2.1 和 …

解码专业术语——应用系统开发项目中的专业词汇解读

文章目录 引言站点设置管理具体要求包括: Footer管理基于URL的权限控制利用数据连接池优化数据库操作什么是数据连接池?优化的优势 利用反射改造后端代码,AJAX反射的作用及其在后端代码中的应用AJAX 实现前后端无刷新交互 引言 创新实践项目二…