多线程08/将单例模式中的懒汉式改写为线程安全

使用同步机制将单例模式中的懒汉式改写为线程安全的

原代码:不安全
package com.dxc;

public class BankTest {
          
   

}
class Bank {
          
   
    private Bank() {
          
   
    }

    private static Bank instance = null;

    public static Bank getInstance(){
          
   

        if (instance == null){
          
   
            instance = new Bank();
        }
        return instance;
    }
}
修改1:安全,此时静态的同步方法是类本身
package com.dxc;

public class BankTest {
          
   

}
class Bank {
          
   
    private Bank() {
          
   
    }

    private static Bank instance = null;
    //synchronized
    public static synchronized Bank getInstance(){
          
   

        if (instance == null){
          
   
            instance = new Bank();
        }
        return instance;
    }
}
修改2:安全
  1. 方式一:synchronized包裹,效率稍差
package com.dxc;

public class BankTest {

}
class Bank {
    private Bank() {
    }

    private static Bank instance = null;

    public static Bank getInstance(){
        //方式一:效率稍差
        synchronized (Bank.class) {
            if (instance == null){
                instance = new Bank();
            }
            return instance;
        }
    }
}
  1. 方式二:优化(加一层if)
package com.dxc;

public class BankTest {
          
   

}
class Bank {
          
   
    private Bank() {
          
   
    }

    private static Bank instance = null;

    public static Bank getInstance(){
          
   
        //方式二:加一层if
        if (instance == null) {
          
   
            synchronized (Bank.class) {
          
   
                if (instance == null) {
          
   
                    instance = new Bank();
                }
            }
        }
        return instance;
    }
}
经验分享 程序员 微信小程序 职场和发展