zoukankan      html  css  js  c++  java
  • 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;
        }
    }

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

  • 相关阅读:
    危险系数
    快速幂模板
    回文数字
    Echart图表使用
    http请求头中Referer的含义和作用
    有关程序员的时间管理
    数据库报错 java.sql.SQLException: The user specified as a definer ('root'@'%') does not exist
    sql中字符串替换
    前端获取数据库的datetime(时间戳) 转化成日期展示出来
    MySQL版本升级
  • 原文地址:https://www.cnblogs.com/libinhyq/p/9564379.html
Copyright © 2011-2022 走看看