单例模式的懒加载-内部类静态变量实现

本文探讨了单例模式的几种实现方式,包括不使用懒加载、使用synchronized锁定的方法以及使用内部类静态变量初始化的单例对象。对比了它们在资源消耗、并发性能等方面的优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前我在使用单例模式时,一般都不是使用的懒加载,
如下:

public class SingletomFactory
{
private static MySingleton instance = new MySingleton();

public static MySingleton getInstance(){
return instance;
}

}

或者使用synchronized直接锁定方法,
如下:

public class SingletomFactory
{
private static MySingleton instance = null;

public synchronized static MySingleton getInstance(){
if(instance == null){
instance = new MySingleton();
}
return instance;
}

}


其中前者没有什么懒加载,这造成了一定资源上的浪费;后者使用了懒加载,但这种懒加载是使用在锁的基础上的,当并发高的时候,会产生阻塞。
后来又发现一种方法,没有使用锁,但确实是懒加载,这就是使用内部类的静态变量初始的单例对象:

public class SingletomFactory
{
private static class Facotry{
public static final MySingleton instance = new MySingleton();
}

public synchronized static MySingleton getInstance(){

return Facotry.instance;
}

}

注:不要使用什么二重检查锁或多重检查锁,因为一些研究已经证明这种方法不能保证对象能够绝对安全的初始化。详情请看 [url]http://xiaoxiao-0311.iteye.com/blog/1046666[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值