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

Java实现单例模式的几种方法

单例模式作为23中设计模式中最基础的设计模式,一般实现方式为

①私有化构造方法

②提供一个获取对象的静态方法

除此之外,实现单例模式的方法还有很多种,这篇文章主要介绍实现单例模式的几种方法。

目录

一、懒汉式单例

二、懒汉式单例优化(双重检测锁)

三、饿汉式单例

四、静态内部类实现的饿汉式单例

五、枚举实现饿汉式单例


一、懒汉式单例

package design.singleton;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/*** 懒汉式单例*/
public class LazySingleton {private staticLazySingleton instance;private LazySingleton() { }/*** 普通懒汉式单例*/public static LazySingleton getInstance() {if (instance == null) {instance = new LazySingleton();}return instance;}}

 

二、懒汉式单例优化(双重检测锁)

第一种方式的代码在多线程下存在并发问题

package design.singleton;/*** 双重检测锁的懒汉式单例*/
public class LazySingleton {private static volatile LazySingleton instance;private LazySingleton() { }/*** 双重检测锁的懒汉单例* @return LazySingleton*/public static LazySingleton getInstance() {if (instance == null) {synchronized (LazySingleton.class) {if (instance == null) {instance = new LazySingleton();}}}return instance;}}

三、饿汉式单例

package design.singleton;/*** 饿汉式单例*/
public class EagerSingleton {private static final EagerSingleton instance;static {instance = new EagerSingleton();}private EagerSingleton() { }public static EagerSingleton getInstance() {return instance;}}

 

四、静态内部类实现的饿汉式单例

package design.singleton;/*** 静态内部类的懒汉式单例* @author heyunlin* @version 1.0*/
public class InnerClassSingleton {private static class StaticInnerClassSingleton {private static final StaticInnerClassSingleton singleton = new StaticInnerClassSingleton();}private InnerClassSingleton() {throw new RuntimeException();}public static StaticInnerClassSingleton getInstance() {return StaticInnerClassSingleton.singleton;}}

五、枚举实现饿汉式单例

package design.singleton;/*** 枚举实现的单例模式* @author heyunlin* @version 1.0*/
public enum EnumSingleton {Singleton;}

相关文章:

Java实现单例模式的几种方法

单例模式作为23中设计模式中最基础的设计模式,一般实现方式为 ①私有化构造方法 ②提供一个获取对象的静态方法 除此之外,实现单例模式的方法还有很多种,这篇文章主要介绍实现单例模式的几种方法。 目录 一、懒汉式单例 二、懒汉式单例优化…...

VIOOVI:标准的作业规范要求是什么?标准化作业规范怎么写?

本文围绕“标准化作业”展开论述,分享一些关于标准化作业以及标准的作业规范等相关知识。 什么是标准化作业? 标准化作业是一种以人的行为为中心,在一个操作序列中有效地进行生产而没有浪费的操作方法。 标准化作业的前提即:关注…...

WPF中的GridSplitter使用原则

WPF中的GridSplitter使用原则 GridSplitter对象必须放在Grid单元格中。可以预留一行或者列的Height或Width属性设置为auto。GridSplitter对象总是改变整行或整列的尺寸,为使该对象外观和行为保持一致,需要拉伸GridSplitter对象使其穿越整行或整列&#…...

【【STM32----I2C通信协议】】

STM32----I2C通信协议 我们会发现I2C有两根通信线: SCL和SDA 同步 半双工 带数据应答 支持总线挂载多设备(一主多从,多主多从) 硬件电路 所有I2C设备的SCL连在一起,SDA连在一起 设备的SCL和SDA均要配置成开漏输出模式 …...

【JUC】线程池ThreadPoolTaskExecutor与面试题解读

1、ThreadPoolTaskExecutor 创建线程池 从它的创建和使用说起,创建和使用的代码如下: 创建: ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(corePoolSize);executor.setMaxPoolSize(maxPoolSize…...

也许你正处于《孤注一掷》中的“团队”,要留心了

看完这部电影,心情久久不能平静,想了很多,倒不是担心自己哪天也成为“消失的yaozi”,而是在想,我们每天所赖以生存的工作,跟电影里他们的工作比,差别在哪里呢? 目录 1. 产品的本质…...

Kafka 入门到起飞 - 什么是 HW 和 LEO?何时更新HW和LEO呢?

上文我们已经学到, 一个Topic(主题)会有多个Partition(分区)为了保证高可用,每个分区有多个Replication(副本)副本分为Leader 和 Follower 两个角色,Leader副本对外提供读…...

go入门实践五-实现一个https服务

文章目录 前言生成证书申请免费的证书使用Go语言生成自签CA证书 https的客户端和服务端服务端代码客户端代码 tls的客户端和服务端服务端客户端 前言 在公网中,我想加密传输的数据。(1)很自然,我想到了把数据放到http的请求中,然后通过tls确…...

面试之快速学习STL-set

set 和 map、multimap 容器不同,使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等使用 set 容器存储的各个元素的值必须各不相同从语法上讲 set 容器并没有强制对存储元素的类型做 const 修饰, 即 set 容器中存储的元素的值是可以修改的。…...

leetcode 1614.括号的最大嵌套深度

⭐️ 题目描述 🌟leetcode链接:括号的最大嵌套深度 ps: 使用数据结构栈来存储 ( 在使用 maxDepth 变量记录栈顶 top 的最大值,当遇到 ) 时删除栈顶元素。举个例子 (1)((2))(((3))),当遇到第一个 ( 时 top 1&#xff…...

Ajax 笔记(四)—— Ajax 进阶

笔记目录 4. Ajax 进阶4.1 同步代码和异步代码4.2 回调函数地狱4.2.1 解决方法一:Promise 链式调用4.2.2 解决方法二:async 函数和 await 4.3 Promise.all 静态方法4.4 事件循环4.4.1 事件循环4.4.2 宏任务与微任务 4.5 案例4.5.1 案例一-商品分类4.5.2 …...

Linux 5种网络IO模型

Linux IO模型 网络IO的本质是socket的读取,socket在linux系统被抽象为流,IO可以理解为对流的操作。刚才说了,对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操…...

Linux多线程【初识线程】

✨个人主页: 北 海 🎉所属专栏: Linux学习之旅 🎃操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌇前言🏙️正文1、什么是线程?1.1、基本概念1.2、线程理解1.3、进程与线程的关系…...

Python爬虫的应用场景与技术难点:如何提高数据抓取的效率与准确性

作为专业爬虫程序员,我们在数据抓取过程中常常面临效率低下和准确性不高的问题。但不用担心!本文将与大家分享Python爬虫的应用场景与技术难点,并提供一些实际操作价值的解决方案。让我们一起来探索如何提高数据抓取的效率与准确性吧&#xf…...

Spring Cloud Gateway系例—参数配置(CORS 配置、SSL、元数据)

一、CORS 配置 你可以配置网关来控制全局或每个路由的 CORS 行为。两者都提供同样的可能性。 1. Global CORS 配置 “global” CORS配置是对 Spring Framework CorsConfiguration 的URL模式的映射。下面的例子配置了 CORS。 Example 77. application.yml spring:cloud:gat…...

QT:UI控件(按设计师界面导航界面排序)

基础部分 创建新项目:QWidget,QMainWindow,QDialog QMainWindow继承自QWidget,多了菜单栏; QDialog继承自QWidget,多了对话框 QMainWindow 菜单栏和工具栏: Bar: 菜单栏:QMenuBar&#xff0…...

AtCoder Beginner Contest 314-A/B/C

A - 3.14 题目要求输出圆周率保留小数几位后的结果 用字符串来存储长串的圆周率&#xff0c;截取字符串就可以了。 #include<iostream> using namespace std; int main() {string s"3.1415926535897932384626433832795028841971693993751058209749445923078164062…...

讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?

同时向讯飞星火、文心一言和通义千问三个国产AI模型提个相同的问题&#xff1a; “python 写一个贪吃蛇的游戏代码” 看哪一家AI写的程序直接能用&#xff0c;谁就胜出&#xff01; 讯飞星火 讯飞星火给出的代码&#xff1a; import pygame import sys import random# 初…...

数学建模之“聚类分析”原理详解

一、聚类分析的概念 1、聚类分析&#xff08;又称群分析&#xff09;是研究样品&#xff08;或指标&#xff09;分类问题的一种多元统计法。 2、主要方法&#xff1a;系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。这里主要介绍系统聚类法…...

【面试问题】当前系统查询接口需要去另外2个系统库中实时查询返回结果拼接优化思路

文章目录 场景描述优化思路分享资源 场景描述 接口需要从系统1查询数据&#xff0c;查出的每条数据需要从另一个系统2中再去查询某些字段&#xff0c; 比如&#xff1a;从系统1中查出100条数据&#xff0c;每条数据需要去系统2中再去查询出行数据&#xff0c;可能系统1一条数…...

如何通过3阶段实现Windows无缝安装APK?革新性工具APK Installer全解析

如何通过3阶段实现Windows无缝安装APK&#xff1f;革新性工具APK Installer全解析 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在Windows系统上运行Android应用一直…...

三相LCL型并网逆变器:电容电流反馈与全前馈电网电压控制策略研究,谐波THD优化至5%以下的相...

三相lcl型并网逆变器控制策略 电容电流反馈和电网电压全前馈&#xff0c;加入5.7.11.13次谐波thd&#xff1c;5。 相关方面电力电气工程&#xff0c;电子信息工程等等都可以。最近在调试三相LCL并网逆变器时发现个有意思的现象&#xff1a;当电网背景谐波严重时&#xff0c;常规…...

MogFace人脸检测模型评测:对比传统方法,看看它强在哪里

MogFace人脸检测模型评测&#xff1a;对比传统方法&#xff0c;看看它强在哪里 1. 引言&#xff1a;从“找脸”的烦恼说起 你有没有试过在手机相册里&#xff0c;想快速找到所有包含某个朋友的合影&#xff1f;或者&#xff0c;在开发一个需要识别人脸的应用程序时&#xff0…...

深入浅出:从地平线J5的“安全岛”设计,聊聊车规级SoC的功能安全到底在保什么?

地平线J5的"安全岛"设计&#xff1a;车规芯片如何守护生命线&#xff1f; 清晨7点30分&#xff0c;北京五环路上的一辆新能源车正以60公里时速自动跟车行驶。突然&#xff0c;前车急刹&#xff0c;车载摄像头捕捉到这一信号后&#xff0c;视觉处理芯片必须在0.1秒内完…...

BiliTools全平台高效解决方案:从新手到进阶的B站资源管理指南

BiliTools全平台高效解决方案&#xff1a;从新手到进阶的B站资源管理指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Trending/bil…...

ESP32S3上电重启问题终极排查指南:从电源纹波到SPI电阻的实战经验

ESP32S3上电重启问题终极排查指南&#xff1a;从电源纹波到SPI电阻的实战经验 当ESP32S3开发板在批量生产中出现上电重启问题时&#xff0c;硬件工程师往往会面临一场与时间赛跑的挑战。最近在调试某款智能家居网关时&#xff0c;我们遇到了典型的RTC_SW_SYS_RST错误&#xff…...

小米平板5 Windows驱动包:让Windows在平板上流畅运行的终极指南

小米平板5 Windows驱动包&#xff1a;让Windows在平板上流畅运行的终极指南 【免费下载链接】MiPad5-Drivers Based on Surface Duo Drivers. 项目地址: https://gitcode.com/gh_mirrors/mi/MiPad5-Drivers 想要在小米平板5上完美运行Windows系统吗&#xff1f;MiPad5-D…...

Anno 1800模组加载器完全掌握指南:从安装到创意开发

Anno 1800模组加载器完全掌握指南&#xff1a;从安装到创意开发 【免费下载链接】anno1800-mod-loader The one and only mod loader for Anno 1800, supports loading of unpacked RDA files, XML merging and Python mods. 项目地址: https://gitcode.com/gh_mirrors/an/an…...

MongoDB C Driver事务处理:ACID保证与分布式事务最佳实践

MongoDB C# Driver事务处理&#xff1a;ACID保证与分布式事务最佳实践 【免费下载链接】mongo-csharp-driver The Official C# .NET Driver for MongoDB 项目地址: https://gitcode.com/gh_mirrors/mo/mongo-csharp-driver MongoDB C# Driver是MongoDB官方提供的.NET驱动…...

OSXCross完整指南:如何在Linux上构建macOS应用程序

OSXCross完整指南&#xff1a;如何在Linux上构建macOS应用程序 【免费下载链接】osxcross Mac OS X cross toolchain for Linux, FreeBSD, OpenBSD and Android (Termux) 项目地址: https://gitcode.com/gh_mirrors/os/osxcross OSXCross是一个强大的macOS交叉编译工具链…...