• 夜话JAVA设计模式之单例模式(单件模式Singleton)


    单例模式也叫单件模式,就是确保一个类只有一个实例,并提供一个全局访问点。

           设计成单例即把某个类设计成我们自己管理的单独实例,避免实例对象的重复创建,我们只有通过单例类的全局访问点获取实例。

    下面来看金典的几种单例模式java代码实现:

     1、饿汉模式

    /**
     * 饿汉模式(创建和运行负担小,占用内存小时使用)
     * @author monkjavaer
     * @date 2018/08/27 21:44
     */
    public class Singleton1 {
    
        private static Singleton1 instance = new Singleton1();
        private Singleton1(){}
        public static Singleton1 getInstance(){
            return instance;
        }
    
    }
    

      

    2、懒汉模式

    /**
     * 懒汉模式
     * (懒汉模式并没有考虑线程安全问题,
     * 在多个线程可能会并发调用它的getInstance()方法,
     * 导致创建多个实例.)
     * @author monkjavaer
     * @date 2018/08/27 22:14
     */
    public class Singleton2 {
        private static  Singleton2 instance ;
        private Singleton2(){}
        public static Singleton2 getInstance(){
            if (instance ==null) {
                instance = new Singleton2();
            }
            return instance;
        }
    }
    

      

    3、懒汉模式处理多线程

    /**
     *
     * 懒汉模式(处理多线程)synchronized同步会降低性能。
     * @author monkjavaer
     * @date 2018/08/27 22:21
     */
    public class Singleton3 {
        private  static  Singleton3 instance ;
        private Singleton3(){}
        public static synchronized Singleton3 getInstance(){
            if (instance == null){
                instance = new Singleton3();
            }
            return instance;
        }
    }
    

      

    4、用“双重检查加锁”,在getIntance()中减少使用同步

    /**
     * 用“双重检查加锁”,在getIntance()中减少使用同步
     * 利用双重检查加锁,首先检查是否实例已经创建,如果没有才同步。
     * 这样只有第一次才会同步。
     * @author monkjavaer
     * @date 2018/08/27 22:28
     */
    public class Singleton4 {
        private volatile static  Singleton4 instance;
    
        private Singleton4(){}
    
        public static Singleton4 getInstance(){
            //如果实例不存在,进入同步区
            if (instance == null){
                //只有第一次才执行
                synchronized (Singleton4.class){
                    //进入区块再检查一次
                    if (instance == null){
                        instance = new Singleton4();
                    }
                }
            }
            return instance;
        }
    
    }
  • 相关阅读:
    第 01 组 Alpha 事后诸葛亮
    第 01 组 Alpha 冲刺(4/4)
    第 01 组 Alpha 冲刺(3/4)
    第 01 组 Alpha 冲刺(2/4)
    第 01 组 Alpha 冲刺(1/4)
    学习日志-2021.11.08
    论文阅读-2021.11.06
    学习日志-2021.10.25
    学习日志-2021.10.24
    学习日志-2021.10.18
  • 原文地址:https://www.cnblogs.com/monkjavaer/p/9569260.html
Copyright © 2020-2023  润新知