饿汉模式:
class Singleton {
//类加载完成就创建一个实例
private static final Singleton singleton = new Singleton();
//私有化构造方法
private Singleton {}
//公共方法,外部调用方法获取实例
public static Singleton getInstance(){
return singleton;
}
}
懒汉模式:
class Singleton{
private static final Singleton instance = null;
private Singleton{}
public static Singleton getInstance(){
if(instance==null){
instance = new Singleton();
}
return instance;
}
}
线程安全的懒汉模式:
class Singleton{
private static final Singleton instance = null;
private Singleton{}
public static Singleton getInstance(){
synchronized(Singleton.class){
if(instance==null){
instance = new Singleton();
}
}
return instance;
}
}
总结:饿汉单例模式类加载就创建了实例;懒汉单例模式如果没有实例才会创建实例;线程安全的懒汉单例模式,多线程模式下,当一个线程第一次访问if(instance ==null)时,会创建一个实例,另外一个线程也访问这段代码,又会创建另外一个实例,这样就不行了,所以用synchronized将代码块包起来。