【Java中23种设计模式-单例模式2--懒汉式2线程安全】

加油,新时代打工人!

简单粗暴,学习Java设计模式。

23种设计模式定义介绍

Java中23种设计模式-单例模式

Java中23种设计模式-单例模式2--懒汉式线程不安全

java 复制代码
package mode;

/**
 * @author wenhao
 * @date 2024/02/19 09:38
 * @description 单例模式--懒汉式 线程安全
 * 是否 Lazy 初始化:是
 * 是否多线程安全:是
 * 这种方式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。
 * 优点:第一次调用才初始化,避免内存浪费。
 * 缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。
 * getInstance() 的性能对应用程序不是很关键(该方法使用不太频繁)。
 */
public class SingleMode2 {
	private SingleMode2() {
	}

	private static volatile SingleMode2 singleMode2;

	public static  SingleMode2 getInstance() {
		if (singleMode2 == null) {
			synchronized (SingleMode2.class){
				if(singleMode2 ==null){
					singleMode2 = new SingleMode2();
				}
			}
		}
		return singleMode2;
	}

	public static void main(String[] args) {
		new Thread(() -> {
			SingleMode2 instance1 = getInstance();
			System.out.println(instance1);
		}).start();

		new Thread(() -> {
			SingleMode2 instance2 = getInstance();
			System.out.println(instance2);
		}).start();

	}
}

通过运行结果看,两个线程的地址值是相同的,说明内存空间里,创建了一个对象。

相关推荐
小猪咪piggy12 分钟前
【JavaEE】(23) 综合练习--博客系统
java·数据库·java-ee
周航宇JoeZhou14 分钟前
JP4-7-MyLesson后台前端(五)
java·前端·vue·elementplus·前端项目·mylesson·管理平台
David爱编程16 分钟前
从 JVM 到内核:synchronized 与操作系统互斥量的深度联系
java·后端
渣哥23 分钟前
Java Set 不会重复?原来它有“记仇”的本事!
java
一叶飘零_sweeeet23 分钟前
从 0 到 1 攻克订单表分表分库:亿级流量下的数据库架构实战指南
java·数据库·mysql·数据库架构·分库分表
苹果醋327 分钟前
数据库索引设计:在 MongoDB 中创建高效索引的策略
java·运维·spring boot·mysql·nginx
Dontla38 分钟前
Dockerfile解析器指令(Parser Directive)指定语法版本,如:# syntax=docker/dockerfile:1
java·docker·eureka
彭于晏Yan40 分钟前
SpringBoot优化树形结构数据查询
java·spring boot·后端
yvya_41 分钟前
常见设计模式详解
设计模式
AAA修煤气灶刘哥1 小时前
缓存这「加速神器」从入门到填坑,看完再也不被产品怼慢
java·redis·spring cloud