单例模式 --饿汉式/懒汉式

/*区分恶汉式和懒汉式

 * 饿汉式:坏处:对象加载时间过长

 *   好处:饿汉式是线程安全的

 * 懒汉式:好处:延迟对象的创建

 * 目前的写坏的坏处:线程不安全。--->到多线程内容时:再修改

 * 

 */

 

单例模式的饿汉式一上来就创建出来

public class SingletonTest {
    
    public static void main(String[] args) {
        Bank ins1 = Bank.getInstance();
        Bank ins2 = Bank.getInstance();
        
        System.out.println(ins1 == ins2);//true
    }
    
}

class Bank{
    
    private Bank() {
        
    }
    
    private static Bank instance = new Bank();
    
    
    public static Bank getInstance() {
        return instance;
    }
}

懒汉式,啥时候需要啥时候创建。

public class SingletonTest {
    
    public static void main(String[] args) {
        Bank ins1 = Bank.getInstance();
        Bank ins2 = Bank.getInstance();
        
        System.out.println(ins1 == ins2);//true
    }
    
}

class Bank{
    
    private Bank() {
        
    }
    
    private static Bank instance = null;
    
    public static Bank getInstance() {
        if(instance == null) {
            instance = new Bank();
        }
        
        return instance;
    }
    
    

}

 

 

解决懒汉式的线程安全问题:

class Bank{

    private static Bank instance = null;

    private Bank(){

    }

//    public synchronized static Bank getInstance(){
    public static Bank getInstance(){
        //方式一:效率稍差
//        synchronized (Bank.class){
//            if(instance == null){
//                instance = new Bank();
//            }
//            return instance;
//        }
        //方式二: 效率更高。
        if(instance == null){
            synchronized (Bank.class){
                if(instance == null){
                    instance = new Bank();
                }
            }
        }
        return instance;

    }
}

 

posted @ 2021-10-23 10:41  donkey8  阅读(45)  评论(0)    收藏  举报