以前我在使用单例模式时,一般都不是使用的懒加载,
如下:
或者使用synchronized直接锁定方法,
如下:
其中前者没有什么懒加载,这造成了一定资源上的浪费;后者使用了懒加载,但这种懒加载是使用在锁的基础上的,当并发高的时候,会产生阻塞。
后来又发现一种方法,没有使用锁,但确实是懒加载,这就是使用内部类的静态变量初始的单例对象:
注:不要使用什么二重检查锁或多重检查锁,因为一些研究已经证明这种方法不能保证对象能够绝对安全的初始化。详情请看 [url]http://xiaoxiao-0311.iteye.com/blog/1046666[/url]
如下:
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]
单例模式详解
本文探讨了单例模式的几种实现方式,包括不使用懒加载、使用synchronized锁定的方法以及使用内部类静态变量初始化的单例对象。对比了它们在资源消耗、并发性能等方面的优劣。
784

被折叠的 条评论
为什么被折叠?



