懒汉式线程安全问题的解决及优化。
public class BankTest {
}
class Bank{
private Bank(){
}
private static Bank instance = null;
public static Bank getInstance(){
if (instance == null){
instance = new Bank();
}
return instance;
}
}
同步代码块,同步方法
package com.atguigu.java1;
/**
* 使用同步机制将单例模式中的懒汉式改写为线程安全的
*
* @author shkstart
* @create 2021-08-25 23:37
*/
public class BankTest {
}
class Bank {
private Bank() {
}
private static Bank instance = null;
// public static synchronized Bank getInstance(){//直接加synchronized,当前锁就是类本身
// //效率差,进来的线程出去后还会在进来
// synchronized (Bank.class) {//快捷键ctrl+alt+t
// if (instance == null){
// instance = new Bank();
// }
// return instance;
// }
// }
//效率高
public static Bank getInstance() {
if (instance == null) {//多加一层判断,第一次都会进如判断,后续线程都不会进去了
synchronized (Bank.class) {
if (instance == null) {
instance = new Bank();
}
}
}
return instance;
}
}