首页 > 编程语言 >Java单例模式

Java单例模式

时间:2023-12-12 10:34:55浏览次数:41  
标签:Java temp lock 模式 static private 单例 SamlUtil samlUtil

代码

public class SamlUtil
{
    private static SamlUtil samlUtil;
	
	private static final Object lock = new Object();

    private SamlUtil() {
		
	}

	public static SamlUtil getInstance() {
		SamlUtil temp = samlUtil;
		if (temp == null) {
			synchronized (lock) {
				temp = samlUtil;
				
				if (temp == null) {
					temp = new SamlUtil();
					samlUtil = temp;
				}
			}
		}

		return samlUtil;
	}
}

要点

为什么要double check?

防止多线程竞争状态下单例不“单”

为什么创造temp?

避免指令重排造成单例无实例

可以不引入temp变量,使用volatile关键字

volatile的主要作用是保证变量在多线程上的可见性,它不会改变单线程程序的执行顺序。

public class SamlUtil
{
    private static volatile SamlUtil samlUtil;
	
	private static final Object lock = new Object();

    private SamlUtil() {
		
	}

	public static SamlUtil getInstance() {
		if (samlUtil == null) {
			synchronized (lock) {
				if (samlUtil == null) {
					samlUtil = new SamlUtil();
				}
			}
		}
		return samlUtil;
	}
}

Ref

https://juejin.cn/post/7049327348784562213

标签:Java,temp,lock,模式,static,private,单例,SamlUtil,samlUtil
From: https://www.cnblogs.com/talentzemin/p/17896222.html

相关文章

  • 车机 Android 环境下利用 CarAudioService 实现自定义 Java 服务自启动
    注意:本文基于Android11进行分析Qidi2023.11.28(MarkDown&Haroopad)0.简介AndroidRO(ResourceOverlay)机制Overlay实现的效果正如其字面意思,就是“在原有效果的基础上再叠加一些效果”。Android提供了两种实现方式:编译时:https://source.android.com/docs/set......
  • Java:实现文件的上传和下载
    1、实现文件上传功能1.配置文件:添加配置文件spring-mvc.xml,配置multipartResolver,实现文件上传和下载的功能。<!--文件上传配置--><beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><propertyname="ma......
  • 车机 Android 环境下利用 CarAudioService 实现自定义 Java 服务自启动
    注意:本文基于Android11进行分析Qidi2023.11.28(MarkDown&Haroopad)0.简介AndroidRO(ResourceOverlay)机制Overlay实现的效果正如其字面意思,就是“在原有效果的基础上再叠加一些效果”。Android提供了两种实现方式:编译时:https://source.android.com/docs/set......
  • 车机 Android 环境下利用 CarAudioService 实现自定义 Java 服务自启动
    注意:本文基于Android11进行分析Qidi2023.11.28(MarkDown&Haroopad)0.简介AndroidRO(ResourceOverlay)机制Overlay实现的效果正如其字面意思,就是“在原有效果的基础上再叠加一些效果”。Android提供了两种实现方式:编译时:https://source.android.com/docs/set......
  • 内核模式
    内核模式Microsoft-用户模式和内核模式内核模式可以干什么用OpenArk查看Windows下所有快捷键的归属。WindowsDefender一般会要求用户打开内核隔离(MemoryIntegrity)。根据微软的描述:“如果内核模式驱动程序意外写入错误的虚拟地址,则属于操作系统或其他驱动程序的数......
  • java时间时区学习
    1、时间戳时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据2、格林威治时间格林尼治平时(英语:Greenw......
  • 建造者模式
    建造者模式故名思意有两个重要的原色,一个是产品(product),即我们需要的某个目标类的对象,一个建造者(builder),当然你可以把建造者先抽象出一个的abstractbuilder,再继承一个具体的builder.最妙的一句是builder类再builder具体东西时,returnthis,这样在builder对象时,就可以使用User......
  • Java多线程编程
    本文中简单介绍一些java多线程相关的内容1.多线程基础Java通过java.lang.Thread类和java.util.concurrent包提供了多线程支持。一个线程可以通过继承Thread类或实现Runnable接口来创建。classMyThreadextendsThread{publicvoidrun(){//线程执行的代码}......
  • Java第七课_面向对象编程
    1.面向对象的编程对象publicclassPractice01{publicstaticvoidmain(String[]args){/*面向对象的编程,将一切事项都视为对象.对象用类来描述,过程在类里实现.使用时只需要调用类,不需要再考虑如何实现.将对象的共同特征进行......
  • Java学习之路(十六)
    Java学习之路(十六)1、File类1.1、File类概述和构造方法【应用】File类介绍它是文件和目录路径名的抽象表示文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已.它可以是存在的,也可以是不存在的.将来是要通过具体......