当前位置: 首页 > 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;}

http://www.lryc.cn/news/127671.html

相关文章:

  • VIOOVI:标准的作业规范要求是什么?标准化作业规范怎么写?
  • WPF中的GridSplitter使用原则
  • 【【STM32----I2C通信协议】】
  • 【JUC】线程池ThreadPoolTaskExecutor与面试题解读
  • 也许你正处于《孤注一掷》中的“团队”,要留心了
  • Kafka 入门到起飞 - 什么是 HW 和 LEO?何时更新HW和LEO呢?
  • go入门实践五-实现一个https服务
  • 面试之快速学习STL-set
  • leetcode 1614.括号的最大嵌套深度
  • Ajax 笔记(四)—— Ajax 进阶
  • Linux 5种网络IO模型
  • Linux多线程【初识线程】
  • Python爬虫的应用场景与技术难点:如何提高数据抓取的效率与准确性
  • Spring Cloud Gateway系例—参数配置(CORS 配置、SSL、元数据)
  • QT:UI控件(按设计师界面导航界面排序)
  • AtCoder Beginner Contest 314-A/B/C
  • 讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
  • 数学建模之“聚类分析”原理详解
  • 【面试问题】当前系统查询接口需要去另外2个系统库中实时查询返回结果拼接优化思路
  • Scada和lloT有什么区别?
  • Conda(Python管理工具)
  • (14)嵌套列表,Xpath路径表达式,XML增删查改,Implicit,Operator,Xml序列化,浅拷贝与深拷贝
  • 软考笔记 信息管理师 高级
  • 124、SpringMVC处理一个请求的流程是怎样的?
  • 低成本高收益,五金店小程序的秘密武器
  • C语言宏定义详解
  • SwiftUI 动画进阶:实现行星绕圆周轨道运动
  • 物理试题-空气净化器
  • Es、kibana安装教程-ES(二)
  • leetcode 917.仅仅反转字母