使用同步机制将单例模式中的懒汉式改写为线程安全的
原代码:不安全
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:安全
- 方式一: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;
}
}
}
- 方式二:优化(加一层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;
}
}