定义:单件模式确保一个类只有一个实例,并提供一个全局访问点。
{
private static Singleton _instance = null;
//将构造函数设为private,防止客户代码通过new实例化对象
private Singleton()
{
}
public static Singleton CreateInstance()
{
//这是一种Lazy Initialization,等到第一次使用的时候才消费,对
//内存占用大的单件类可以采用
if(_instance == null)
_instance = new Singleton();
return _instance;
}
}
在多线程环境中的单件模式:
这样的实现在多线程的情况下并不能保证一定是实例化一个实例。比如有两个线程现在同时在判断if(_instance == null),这个时候它们得到的肯定都是true值,这个时候两个线程都会进入if块内,从而实例化出两个Singleton的实例
private static Singleton instance;
private Singleton() {}
public synchronized static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
503

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



