单例模式多线程安全

本文探讨了设计模式中的单例模式,重点分析了在多线程环境下如何确保单例的安全性。从非线程安全的单例模式开始,逐步引入了线程安全的实现方式,包括同步方法、双重同步锁机制,并讨论了JVM的内存模型对单例创建的影响,最终提出了一种既线程安全又高效的单例模式实现。
摘要由CSDN通过智能技术生成

设计模式之单例模式

单例模式就是说系统中对于某类的只能有一个对象,不可能出来第二个。

单例模式也是23中设计模式中在面试时少数几个会要求写代码的模式之一。主要考察的是多线程下面单例模式的线程安全性问题。

1.多线程安全单例模式实例一(不使用同步锁)

public class Singleton {
	private static Singleton sin=new Singleton();    ///直接初始化一个实例对象
	private Singleton(){    ///private类型的构造函数,保证其他类对象不能直接new一个该对象的实例
	}

	public static Singleton getSin(){    ///该类唯一的一个public方法   
  	 	return sin;
	}
}

上述代码中的一个缺点是该类加载的时候就会直接new 一个静态对象出来,当系统中这样的类较多时,会使得启动速度变慢 。

第一次加载类的时候会该类加载的时候就会直接new 一个静态对象出来(即创建Singleton实例),这样的结果与我们所期望的不同,因为创建实例的时候可能并不是我们需要这个实例的时候。同时如果这个Singleton实例的创建非常消耗系统资源,而应用始终都没有使用Singleton实例,那么创建Singleton消耗的系统资源就被白白浪费了。而且当系统中这样的类较多时,会使得启动速度变慢 。

为了避免这种情况,我们通常使用惰性加载的机制,也就是在使用的时候才去创建。以上代码的惰性加载代码如下:

public class Singleton{       

private static Singleton instance = null;       

private Singleton(){       

    …       

} 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值