首页 > 其他分享 >单例模式:生成只存在一个的实例

单例模式:生成只存在一个的实例

时间:2023-04-20 11:56:13浏览次数:29  
标签:Singleton private 生成 instance 实例 static 单例 public

饿汉模式

public class Singleton {

	/* 在类装载的时候就完成实例化 */
	private static Singleton instance = new Singleton();

	/* 私有构造方法,防止被实例化 */
	private Singleton() {
	}

	/* 获取单例实例 */
	public static Singleton getInstance() {
		return instance;
	}
}

懒汉模式(双重检查)

优点:线程安全;延迟加载;效率较高。

public class Singleton {
	/* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
	private static volatile Singleton instance = null;

	/* 私有构造方法,防止被实例化 */
	private Singleton() {
	}

	/* 1:懒汉式,静态工程方法,创建实例 */
	public static Singleton getInstance() {
		if (instance == null) {
			synchronized(Singleton.class) {
				if (instance == null) {
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
}

静态内部类

与饿汉模式实例机制相似,静态内部类方式在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装载SingletonInstance类,从而完成Singleton的实例化。

优点:避免了线程不安全,延迟加载,效率高。

public class Singleton {

	/* 私有构造方法,防止被实例化 */
	private Singleton() {
	}

	private static class SingletonInstance {
		private static final Singleton instance = new Singleton();
	}

	/* 获取单例实例 */
	public static Singleton getInstance() {
		return SingletonInstance.instance;
	}
}

标签:Singleton,private,生成,instance,实例,static,单例,public
From: https://www.cnblogs.com/li053/p/17328367.html

相关文章

  • 开发者必读!常用的二维码生成器 API 推荐
    引言二维码是一种能够存储信息的图形码,它在现代社会中扮演着越来越重要的角色。生成二维码的过程通常需要使用二维码生成器,而现在有很多二维码生成器API可以供开发者使用。在本文中,我们将讨论二维码生成器API的工作原理、应用场景,并且给大家介绍一些常用的二维码生成器API,......
  • webservice 客户端生成命令
    wsdl2java-frontendjaxws21-client-pcom.creditease.webapp.webservice.voices-dd:/http://10.105.48.14:8893/Service.svc?wsdlwsdl2java-frontendjaxws21-client-pcom.creditease.webapp.webservice.voices-dd:/http://10.105.48.14:......
  • PHP Web实现文件上传下载功能实例解析
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。 二、Range  用于请求头......
  • 手把手逐步解析Javaweb登录实例
    一、编写前端界面<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</titl......
  • 在JDK11中生成JRE11的方法
    从Java11开始,不再默认安装JRE,需要手工生成:以管理员身份启动cmd。注:如果没有管理员权限,就会因权限不够而导致生成失败。进入JDK11所在的目录的上一级目录:C:>cdc:\ProgramFiles\Java通过命令来生成JRE:jdk-11.0.19\bin\jlink.exe--module-pathjmods--add-modulesjava.d......
  • 中电金信:生成式AI热潮下,文本智能走向何方?
    突破通用人工智能场景,生成式AI正在向全行业应用进攻。一个脑筋急转弯,几个月前ChatGPT是这样回答的:然而,仅仅几个月的迭代,它的回答却让人出乎意料。看似调侃的对比背后实则是无数次模型训练的支撑。基于数据的激增和算法的提升,生成式AI可自主分析用户数据,输出具有逻辑性的文本、语音......
  • 简单的密码生成器
    importrandomchars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-="length=int(input("请输入密码长度:"))password=""foriinrange(length):password+=random.choice(chars)print("生成的密......
  • 学生成绩管理系统
    #假设你是一名老师,你想要管理你班级学生的成绩。你可以使用Python的字典来记录每个学生的成绩。以下是一个简单的程序:#创建一个空字典来存储学生成绩student_scores={}#添加学生成绩记录student_scores['张三']={'语文':90,'数学':80,'英语':85}student_scores['李四......
  • mdk 生成bin
     c:\Keil_v5\ARM\ARMCC\bin\fromelf.exe--bin--outputstm32f103cb/@L.binstm32f103cb/@L.axf ......
  • jmeter生成报告
     1、切换到要保存报告的目录-----C:\Users\feng\Desktop\monkey>2、输入执行完压测后,生成报告并保存---jmeter-n-tC:\Users\feng\Desktop\自考\察看结果树.jmx-lresult.jtl-e-ojmeter 示例例1:测试计划与结果,都在%JMeter_Home%\bin目录> jmeter-n-ttest1.jmx......