【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();

	}
}

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

相关推荐
瓯雅爱分享3 小时前
Java+Vue构建的采购招投标一体化管理系统,集成招标计划、投标审核、在线竞价、中标公示及合同跟踪功能,附完整源码,助力企业实现采购全流程自动化与规范化
java·mysql·vue·软件工程·源代码管理
mit6.8246 小时前
[C# starter-kit] 命令/查询职责分离CQRS | MediatR |
java·数据库·c#
诸神缄默不语6 小时前
Maven用户设置文件(settings.xml)配置指南
xml·java·maven
任子菲阳6 小时前
学Java第三十四天-----抽象类和抽象方法
java·开发语言
为java加瓦6 小时前
单例模式:原理、实现与演进
单例模式
学Linux的语莫7 小时前
机器学习数据处理
java·算法·机器学习
找不到、了7 小时前
JVM的即时编译JIT的介绍
java·jvm
rongqing20197 小时前
Google 智能体设计模式:人机协同(HITL)
设计模式
西瓜er7 小时前
JAVA:Spring Boot 集成 FFmpeg 实现多媒体处理
java·spring boot·ffmpeg
你总是一副不开心的样子(´ . .̫ .7 小时前
一、十天速通Java面试(第三天)
java·面试·职场和发展·java面试