Java详细介绍单例模式的应用

 更新时间:2022年09月23日 09:19:05   作者:方片6  
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式

一、什么是单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

1、单例类只能有一个实例。

2、单例类必须自己创建自己的唯一实例。

3、单例类必须给所有其他对象提供这一实例。

二、实现单例模式的几种方法

1.懒汉模式(线程不安全)

2.懒汉模式(线程安全)

3.饿汉模式

4.双检锁/双重校验锁

5.登记式/静态内部类

6.枚举

1. 懒汉模式(线程不安全)

是否 Lazy 初始化:是

是否多线程安全:否

实现难度:易

描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。

public class A{
	// 懒汉模式
	private static A a = null;
	// 私有化构造方法
	private A(){};
	public static A getInstance(){
		if(a == null){
			a = new A();
		}
		return a;
	}
}

2. 懒汉模式(线程安全)

是否 Lazy 初始化:是

是否多线程安全:是

实现难度:易

描述:这种方式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。

优点:第一次调用才初始化,避免内存浪费。

缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。

public class A{
	// 懒汉模式
	private static A a = null;
	private A(){};
	public static synchronized A getInstance(){
		if(a == null){
			a = new A();
		}
		return a;
	}
}

3. 饿汉模式

是否 Lazy 初始化:否

是否多线程安全:是

实现难度:易

描述:这种方式比较常用,但容易产生垃圾对象。

优点:没有加锁,执行效率会提高。

缺点:类加载时就初始化,浪费内存。

public class B{
	// 饿汉模式
	private static B b = new B();
	public static B getInstance(){
		return b;
	}
}

到此这篇关于Java详细介绍单例模式的应用的文章就介绍到这了,更多相关Java单例模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java Optional用法面试题精讲

    Java Optional用法面试题精讲

    这篇文章主要为大家介绍了Java Optional用法面试题精讲,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 基于RecyclerChart的KLine绘制详解

    基于RecyclerChart的KLine绘制详解

    这篇文章主要为大家详细介绍了基于RecyclerChart实现KLine绘制的相关资料,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-03-03
  • MyBatis中的resultMap简要概述

    MyBatis中的resultMap简要概述

    这篇文章主要介绍了MyBatis中的resultMap简要概述的相关资料,需要的朋友可以参考下
    2016-07-07
  • 在IDEA中创建Web项目的详细过程

    在IDEA中创建Web项目的详细过程

    这篇文章主要给大家介绍了关于在IDEA中创建Web项目的详细过程,很多朋友可能在学习java基础的时候已经熟练掌握了IDEA创建java项目的基本步骤,但随着学习技术的不断深入,不同的IDEA版本可能在项目的创建页面上出现些许的出入,需要的朋友可以参考下
    2023-10-10
  • SpringBoot源码剖析之属性文件加载原理

    SpringBoot源码剖析之属性文件加载原理

    这篇文章主要给大家介绍了关于SpringBoot源码剖析之属性文件加载原理的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • java中 IO 常用IO操作类继承结构分析

    java中 IO 常用IO操作类继承结构分析

    本篇文章小编为大家介绍,java中 IO 常用IO操作类继承结构分析。需要的朋友参考下
    2013-04-04
  • java教学笔记之对象的创建与销毁

    java教学笔记之对象的创建与销毁

    面向对象的编程语言使程序能够直观的反应客观世界的本来面目,并且使软件开发人员能够运用人类认识事物所采用的一般思维方法进行软件开发,是当今计算机领域中软件开发和应用的主流技术。
    2016-01-01
  • 详解Java中的线程模型与线程调度

    详解Java中的线程模型与线程调度

    这篇文章主要介绍了详解Java中的线程模型与线程调度的相关资料,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2021-02-02
  • springboot+dynamicDataSource动态添加切换数据源方式

    springboot+dynamicDataSource动态添加切换数据源方式

    这篇文章主要介绍了springboot+dynamicDataSource动态添加切换数据源方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • IDEA创建SpringBoot项目整合mybatis时mysql-connector-java报错异常的详细分析

    IDEA创建SpringBoot项目整合mybatis时mysql-connector-java报错异常的详细分析

    最近工作中发现了个错误,分享给同样遇到这个问题的朋友,这篇文章主要给大家介绍了关于IDEA创建SpringBoot项目整合mybatis时mysql-connector-j报错异常的详细分析,需要的朋友可以参考下
    2023-02-02

最新评论