单例模式:饿汉式、懒汉式;线程安全的单例模式创建的6种方式

2024-02-29 14:28

本文主要是介绍单例模式:饿汉式、懒汉式;线程安全的单例模式创建的6种方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

单例模式

单例模式Singleton是一种创建型模式,指某个采用Singleton单例模式,则这个类在同一个

JVM上,只能产生一个实例供外部访问,并且仅提供一个全局的访问方式。

懒汉式

懒汉式线程不安全

public class Singleton1 {private static Singleton1 instance;// 构造方法私有化!!!private Singleton1() {};public static Singleton1 getInstance() {if(instance == null) {instance = new Singleton1();}return instance;}
}

饿汉式

饿汉式线程安全

public class Singleton2 {private static final Singleton2 instance = new Singleton2();// 构造方法私有化private Singleton2() {};public static Singleton2 getInstance() {return instance;}
}

线程安全的单例模式

  1. 饿汉式线程安全
  2. 全局锁线程安全
  3. 静态代码块创建单例对象线程安全
  4. 双重校验锁实现线程安全
  5. 静态内部类实现线程安全的单例模式
  6. 内部枚举类实现线程安全
  • 全局锁

    public class Singleton3 {private static Singleton3 instance;// 构造方法私有化private Singleton3() {};// 通过synchronized添加全局锁实现线程安全public static synchronized Singleton3 getInstance() {if (instance == null) {instance = new Singleton3();}return instance;}
    }
    
  • 静态代码块

    public class Singleton4 {private static final Singleton4 instance;// 静态代码块创建单例对象static {instance = new Singleton4();}// 构造方法私有化private Singleton4(){}public static Singleton4 getInstance() {return instance;}
    }
    
  • 双重校验锁

    public class Singleton5 {private static Singleton5 instance;private Singleton5() {}public static Singleton5 getInstance() {if (instance == null) {synchronized (Singleton5.class) {if (instance == null) {instance = new Singleton5();}}}return instance;}
    }
    
  • 静态内部类

    public class Singleton6 {// 构造方法私有化private Singleton6() {};// 静态内部类private static class SingletonHolder{// 创建单例对象private static Singleton6 instance = new Singleton6();}public static Singleton6 getInstance() {return Singleton6.SingletonHolder.instance;}
    }
    
  • 静态枚举类

    public class Singleton7 {private Singleton7() {}// 内部枚举类enum SingletonEnum{INSTANCE;// 单例对象private Singleton7 instance;private SingletonEnum() {instance = new Singleton7();}private static Singleton7 getInstance() {return SingletonEnum.INSTANCE.instance;}}
    }	
    

这篇关于单例模式:饿汉式、懒汉式;线程安全的单例模式创建的6种方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/759115

相关文章

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常