zoukankan      html  css  js  c++  java
  • Java 单例模式之懒汉模式和饿汉模式 以及线程安全

    Java 单例模式分 懒汉模式 和 饿汉模式

    单例模式主要运用于频繁的调用不需要创建新的实例这种情况, 例如工具类,数据库操作类等。 

    单例模式需要将构造方法私有化,防止创建对象。

    饿汉模式:

    package tt;
    
    public class Singleton {
    
        private static Singleton sign = new Singleton();
    
        private Singleton() {
        }
    
        public static Singleton getSign() {
            return sign;
        }
    
    }

    饿汉模式初始化就创建了对象, 每次调用都返回同一个对象。

    饿汉模式是线程安全的。

    懒汉模式:

    package tt;
    
    public class Singleton {
    
        private static Singleton sign = null;
    
        private Singleton() {
        }
    
        public static Singleton getSign() {
            if(null==sign){
                sign =new Singleton();
            }
            return sign;
        }
    
    }

    与饿汉模式的区别是初始化不创建对象, 在使用的时候判断, 如果没有才创建。

    这样在多线程的环境下会存在线程安全问题。 解决方法就是线程加锁

    效率比较高的加锁方法:

    package tt;
    
    public class Singleton {
    
        private static Singleton sign = null;
    
        private Singleton() {
        }
    
        public static Singleton getSign() {
            // 当前对象为null 的话才进入同步块
            if (null == sign) {
                synchronized (Singleton.class) {
                    if (null == sign) {
                        sign = new Singleton();
                    }
                }
            }
            return sign;
        }
    
    }
  • 相关阅读:
    Python学习第15天_模块
    Python学习第14天_文件读取写入
    Python学习第13天_练习(图书馆的创建)
    Python学习第12天_类
    Python学习第11天_参数
    Python学习第10天_函数
    Python学习第九天_模块的应用
    Android Bluetooth HIDL服务分析
    Mac下CLion配置Google GTest小结
    MacOS通过homebrew安装老版本的软件
  • 原文地址:https://www.cnblogs.com/Marvellous/p/4533409.html
Copyright © 2011-2022 走看看