1. 非线程安全
public class Singleton{
private Singleton(){}
private static Singleton instance;
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
2.线程安全(Synchronized)
效率低
public class Singleton{
private Singleton(){}
private static Singleton instance;
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
3. 线程安全(双重检查🔒)
存在空指针问题
public class Singleton{
private Singleton(){}
private static Singleton instance;
public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
4. 线程安全(双重检查🔒+volatile)
public class Singleton{
private Singleton(){}
private static volatile Singleton instance;
public static Singleton getInstance() {
//第一次判断,如果instance的值不为null,不需要抢占锁,直接返回对象
if(instance == null) {
//给当前类的字节码对象加锁
synchronized (Singleton.class){
//第二次判断
if(instance == null){
instance = new Singleton();
}
}
}
}
return instance;
}
5. 线程安全(静态内部类方式)
//存在空指针异常的问题
public class Singleton{
private Singleton(){}
private static class SingletonHolder{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.INSTANCE;
}
}