单例模式:确保一个类只有一个实例,并提供一个全局访问点。
没有使用同步,会导致多线程时可能创造多个Singleton实例。
方法使用了同步,不会再多线程时创建多个实例,但是每次调用此方法,都是同步的,效率低下。
方法内部加锁,只同步一次,避免多线程创建多个实例,同时效率也快,volatile是关键字,instance被初始化成Singleton实例时,多个线程正确处理instance变量。
public class Singleton {
private static Singleton instance;
private Singleton(){
}
public static Singleton getInstance(){
if(instance==null)
instance = new Singleton();
return instance;
}
}
没有使用同步,会导致多线程时可能创造多个Singleton实例。
public class Singleton {
private static Singleton instance;
private Singleton(){
}
public static synchronized Singleton getInstance(){
if(instance==null)
instance = new Singleton();
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;
}
}
方法内部加锁,只同步一次,避免多线程创建多个实例,同时效率也快,volatile是关键字,instance被初始化成Singleton实例时,多个线程正确处理instance变量。
1514

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



