• java设计模式之单例模式


    设计模式(Design Pattern):是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。

    使用设计模式的目的:使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。

    单例模式:保证整个应用中某个实例有且只有一个。

    单例模式的分类:

    1. 饿汉模式
    2. 懒汉模式

    一、饿汉模式

    /**
     * 单例模式Singleton
     * 应用场合:有些对象只需要一个就足够了
     * 作用:保证整个应用程序中某个实例有且只有一个
     * 类型:饿汉模式
     * */
    public class Singleton {
        //1.将构造方法私有化,不允许外部直接创建对象
        private Singleton(){
        }
        
        //2.创建类的唯一实例,使用private static修饰
        private static Singleton instance = new Singleton();
        
        //3.提供一个用于获取实例的方法,使用public static修饰
        public static Singleton getInstance(){
            return instance;
        }
    }

    饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全。

    二、懒汉模式

    /**
     * 单例模式Singleton
     * 应用场合:有些对象只需要一个就足够了
     * 作用:保证整个应用程序中某个实例有且只有一个
     * 类型:懒汉模式
     * */
    public class Singleton {
        //1.将构造方法私有化,不允许外部直接创建对象
        private Singleton(){
        }
        
        //2.声明类的唯一实例,使用private static修饰
        private static Singleton instance;
        
        //3.提供一个用于获取实例的方法,使用public static修饰
        public static Singleton getInstance(){
            if(instance==null){
                instance = new Singleton();
            }
            return instance;
        }
    }

    懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全。主要原因是因为在多线程中,当第一个线程进入获取实例的方法,还未开始实例化对象时被中断,第二个线程进来后发现仍然没有实例,所以会创建实例,而之后第一个线程重新进来时,依旧会创建一个线程,这样就不能保证创建唯一实例了,所以是线程不安全的,解决的办法就是在获取实例的方法内加锁。

  • 相关阅读:
    1、PHP入门二维数组与循环
    Nginx 配置反向代理后,页面中取绝对URL地址的问题显示代理端口
    苹果手机上点击WEUI日期控件不容易点中
    ios 不支持-,-时间。
    Newtonsoft.Json添加项
    Baidu地图Map api直接加https不起作用
    腾讯云cos封装
    linux连接工具隧道模式
    微信调试工具测试时有时候复制URL没有corpid解决
    WEUI控件JS用法
  • 原文地址:https://www.cnblogs.com/libinhyq/p/9564379.html
Copyright © 2020-2023  润新知