饿汉(线程安全):在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变。
public class Singleton {
//类被第一次使用的时候就已经完成了加载。类的加载过程,系统保证线程安全。
private static Singleton inst=new Singleton();
//私有构造器,避免被别人创建实例
private Singleton(){}
//提供一个公共的静态方法,获取唯一的实例
public static Singleton getInstance(){
return inst;
}
}
懒汉(线程不安全):在初始化类的时候,不创建唯一的实例,用到才创建。
必须加上同步,否则有可能依然创建多个实例。
public class Singleton {
private static Singleton inst = null;
private Singleton(){}
//更替部分
public static synchronized Singleton getInstance(){
if(inst==null){ //每次获取实例都需要判断,使用频繁时性能下降
inst = new Singleton();
}
return inst;
}
}
基于“最小范围原则”加同步可修改为:
public static Singleton getInstance()
{
synchronized(Singleton.class){
if(inst==null){
inst = new Singleton();
}
}
return inst;
}