• Singleton


    单例模式(Singleton) 对应的慕课视频:https://www.imooc.com/video/1772

    单例设计模式用于保证一个类只有一个实例

    他有两种表现形式:懒汉式,饿汉式

    饿汉式和懒汉式最明显的区别就是两者对象实例化的时间不相同。

    恶汉式是在类加载的时候就创建,懒汉式是在调用实例的时候在加载。

    下面来看一下饿汉式的基本代码

    package songyan.demo;
    
    //单例模式:保证一个类的实例只有一个
    /**
     * 单例设计模式-饿汉式
     * @author Administrator
     *
     */
    public class singleton {
        //隐藏构造函数
        private singleton(){
            }
        
        //创建该类的对象
        private static singleton instance = new singleton();
        
        //提供反复问内部实例的方法
        public static  singleton getInstance()
        {
            return instance;
        }
    }

    饿汉式编写顺序:

    隐藏构造函数(将构造函数私有化,防止在类的外部创建对象)

    创建该类的对象(private static)

    对外提供访问这个对象的方法

    懒汉式的实现

    package test;
    
    /**
     * author:songyan
     * date: 2019/11/10
     **/
    public class SingletonDemo2 {
        private static SingletonDemo2 singletonDemo2 = null;
        public SingletonDemo2 getInstance(){
            if(singletonDemo2==null)
                singletonDemo2 = new SingletonDemo2();
            return singletonDemo2;
        }
        private SingletonDemo2(){}
    }

    懒汉式的编写顺序与饿汉式相同,不同的是对象实例化的时间,在懒汉式中,是在访问该对象的时候将对象实例化的。

    再来比较一下两种实现方式

    1,饿汉式在加载类的时候比较慢,但是在运行的时候比较快。(懒汉式相反)

    2,饿汉式是线程安全的,而懒汉式是线程安全的

    懒汉式的线程安全是可以解决的,可以通过同步代码块或者同步函数来实现,同步代码块要比同步函数更优一些(同步函数的范围太大,同步了不必要的部分,可以使用同步函数仅同步局部即可)

    当然使用同步的方式解决多线程的安全问题也是有弊端的,他会降低程序执行的效率,所以在开发过程中更多的是使用饿汉式的实现方式

    线程安全的懒汉式

    package test;
    
    /**
     * author:songyan
     * date: 2019/11/10
     **/
    public class SingletonDemo2 {
        private static SingletonDemo2 singletonDemo2 = null;
        public SingletonDemo2 getInstance(){
            synchronized (this){
                if(singletonDemo2==null)
                    singletonDemo2 = new SingletonDemo2();
                return singletonDemo2;
            }
        }
        private SingletonDemo2(){}
    }
  • 相关阅读:
    java日期格式化
    Map遍历方法
    Eclipse常用快捷键
    mysql事务块处理
    oracle事务块示例
    取得服务器或应用程序当前路径
    tomcat下运行war包
    java通过CLASSPATH读取包内文件
    Hive分析窗体函数之SUM,AVG,MIN和MAX
    LeetCode 145 Binary Tree Postorder Traversal(二叉树的兴许遍历)+(二叉树、迭代)
  • 原文地址:https://www.cnblogs.com/excellencesy/p/8856221.html
Copyright © 2020-2023  润新知