模式一:
class Singleton2 {
private Singleton2(){
}
private static Singleton2 instance;
public static Singleton2 getInstance() {
if(instance==null){
instance=new Singleton2();
}
return instance;
}
}
不用说,大家也知道,这种在单线程程序中是没什么问题的,但多线程程序中,则可能会创建出2个或多个对象.
模式二:
public class Singleton {
private Singleton(){
}
private static Singleton instance =new Singleton();
public static Singleton getInstance(){
return instance;
}
}
这种很显然没有前者的问题.
模式三:
public class Singleton {
private static class SingletonHolder {
static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
在模式2中,不管我们是不是调用getInstance()都会存在一个实例在内存中,而在模式3中,
只有我们调用了getInstance(),才会创建唯一的实例到内存中.并且也解决了模式1中多线程的问题.
解决的方式是利用了Classloader的特性
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yezi77321660/archive/2009/03/20/4007175.aspx