0
点赞
收藏
分享

微信扫一扫

单例模式(懒汉式)

莞尔小迷糊 2022-03-30 阅读 107

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;
	}
}
举报

相关推荐

0 条评论