解决单例模式懒汉式的线程安全问题的几种办法
方法一:利用同步方法
将getInstance()作为同步方法
class Bank{
private Bank(){}
private static Bank instance = null;
//同步方法
public static synchronized Bank getInstance(){
if (instance == null){
instance = new Bank();
}
return instance;
}
方法二:利用同步代码块
同步代码块中可以有两种写法,一种效率较好。
class Bank{
private Bank(){}
private static Bank instance = null;
public static Bank getInstance(){
//方式一:效率稍差
synchronized (Bank.class) { //同步代码块
if (instance == null){
instance = new Bank();
}
return instance;
}
}
class Bank{
private Bank(){}
private static Bank instance = null;
public static Bank getInstance(){
//方式二:先判断instance是否为null
if (instance == null) {
synchronized (Bank.class) {
if (instance == null) {
instance = new Bank();
}
}
}
return instance;
}
}