单例模式笔记
定义
实现
懒汉实现
设置构造方法为私有,多线程并不安全
public class SingleTon{
private static SingleTon s=null;
private SingleTon(){
//初始化操作...
}
public static SingeTon getInstance(){
if(s==null)
s=new SingleTon();
return s;
}
}
饿汉实现
加载类时就初始化实例,浪费了一些内存空间
public class SingleTon{
private static SingleTon s=new SingleTon();
private SingleTon(){
//初始化操作...
}
public static SingeTon getInstance(){
//if(s==null)
// s=new SingleTon();
return s;
}
}
同步方法
没有多线程问题,但是线程挂起的消耗可能很大
public class SingleTon{
private static SingleTon s=null;
private SingleTon(){
//初始化操作...
}
public static synchronized SingeTon getInstance(){
if(s==null)
s=new SingleTon();
return s;
}
}
double checking 方法
锁住整个方法可能有较大的消耗,这个实例事实上仅仅创建一次.
public class SingleTon{
private static SingleTon s=null;
private SingleTon(){
//初始化操作...
}
public static SingeTon getInstance(){
if(s==null)
//只有第一次创建的时候进入方法才会被锁住,其他时候不会锁住
synchronized(SingleTon.class){
if(s==null)
s=new SingleTon();
}
return s;
}
}