多线程环境单例模式

多线程环境单例模式 : 双重检测+上锁

public class Singleton {

/**
 * 构造器私有化防止被公共创建
 */
private Singleton() {
    
}

//创建多线程锁
private static Object lock = new Object();

//单例本体
private static Singleton singleton = null;

//获取单例
public static Singleton getInstance() {
    
    //当多线程环境中单例本体为空
    if (singleton == null) {
        
        //上锁防止被其他线程抢夺
        synchronized (lock) {
            
            //双重检查更加安全和符合业务场景
            if (singleton == null) {
                
                //加锁和双重检测后初始化单例
                singleton = new Singleton();
            }
        }
    }
    
    //返回单例结果
    return singleton;
  }
}    

你可能感兴趣的:(单例模式多线程)