zoukankan      html  css  js  c++  java
  • 单例模式三种模式,饿汉(饥汉)、饱汉(懒汉)、双重锁模式

    此文转载

    今天看某培训机构提供面试题中设计模式部分,对饱汉和饿汉比较感兴趣,就搜了一下,然后误人子弟,然后就觉得有必要记录一下

    声明:本人没有看过设计模式的书籍,只是根据概念对比的看了一些博客;

    首先示众一篇大错特错的文章,谁有CSDN帐号,提醒他把文章删了吧,错的离谱
    https://blog.csdn.net/j_a_v_a_guan/article/details/48004007
    经典写法:
    懒汉和饿汉的最大区别就在于创建对象时候是否实例化;有new就是饿汉,反之就是懒汉,跟加不加synchronized ,没有关系
    懒汉:
    public class SingleTon {
    
        private static SingleTon instance;
    
        private SingleTon() {
    
        }
    
        public static SingleTon getInstance() {
            if (instance == null) {
                    instance = new SingleTon();
            }
            return instance;
        }
    }
    
    懒汉安全写法
    
    public class SingleTon {
    
        // 静态实例变量加上volatile
        private static volatile SingleTon instance;
    
        // 私有化构造函数
        private SingleTon() {
    
        }
    
        // 双重检查锁
        public static SingleTon getInstance() {
            if (instance == null) {
                synchronized(Singleton.class){
                    if(instance == null){
                            instance = new SingleTon();
                    }
            }
        }
        return instance;
        }
    
    }                                

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    饿汉模式
    public class SingleTon {
        // 静态实例变量,直接初始化
        private static SingleTon instance = new SingleTon();
        // 私有化构造函数
        private SingleTon() {
    
        }
        // 静态public方法,向整个应用提供单例获取方式
        public static SingleTon getInstance() {
            return instance;
        }
    }

    ================================================================================================================================================

  • 相关阅读:
    JavaScript--数组的声明与创建
    JavaScript--Object对象的两种表示方法
    上下文模式
    Ajax详解
    JS面向对象之原型链
    JS面向对象特性和值类型与复合类型
    JS面向对象使用面向对象进行开发
    JS中的递归
    前端协作流程
    JavaScript中内存使用规则--堆和栈
  • 原文地址:https://www.cnblogs.com/zhou-test/p/9770734.html
Copyright © 2011-2022 走看看