• 单例设计模式实现的三种方式


    1、饿汉式

    • 私有化构造方法
    • 创建一个对象,这个对象是被 private static final 修饰
    • 向外创建一个静态方法,返回这个实例。
    package singleton;
    /**
    * 单例模式:饿汉式,最为简单的写法同时也是使用最多的
    *
    */
    public class Demo{
        private Demo(){}
    
    
        private static final Demo demo= new Demo();
    
    
        public static Demo getInstance(){
            return demo;
        }
    
    }
    
    

    2、懒汉式(升级版)

    • 私有化构造方法

    • 创建静态内部类

    • 编写向外提供单例的方法(方法中直接返回静态类的私有化成员对象)

    package singleton;
    
    /**
    * 迄今为止最安全的懒加载
    * 线程安全由jvm保证,因为jvm只对类加载一次
    * 其中的静态内部类是当使用getInstance方法的时候才加载
    */
    public class Lanhanshi {
        private Lanhanshi(){
            
        }
        
        private static class LanhanshiHander{
            private static final Lanhanshi lanhanshi = new Lanhanshi();
        }
    
        public static Lanhanshi getInstance() {
            return LanhanshiHander.lanhanshi;
        }
    
        public static void main(String[] args) {
            Lanhanshi instance = Lanhanshi.getInstance();
            Lanhanshi instance2 = Lanhanshi.getInstance();
            System.out.println(instance==instance2);
            new Thread(()-> {
                for (int i = 0; i < 100; i++) {
                    System.out.println(Lanhanshi.getInstance());
                }
                }).start();
        }
    }
    

    3、枚举方法创建单例

    package singleton;
    /**
    * 在effect java中,推荐使用枚举单例,不仅线程安全,还可以防止序列化
    *
    */
    public enum  EnumSingle {
        INSTANCE;
        public void EnumSingle(){}
    
        public static void main(String[] args) {
            for (int i = 0; i < 100; i++) {
                new Thread(()->{
                    System.out.println(EnumSingle.INSTANCE.hashCode());
                }).start();
            }
        }
    }
    

    打印结果
    在这里插入图片描述
    提示:枚举类没有构造方法。

  • 相关阅读:
    如何很“礼貌”的避免抛出空指针异常
    如何优雅的使用第三方插件写实体类
    IntelliJ IDEA(2019.03)破解教程(亲测实用)
    vue.js 中使用(...)运算符报错的解决方法
    44个Java性能优化
    Spring MVC原理及配置
    Intellij IDEA 从入门到上瘾 图文教程
    JVM系列二 GC策略&内存申请、对象衰老
    Spring MVC国际化配置
    Java性能优化的50个细节(珍藏版)
  • 原文地址:https://www.cnblogs.com/dataoblogs/p/14121982.html
Copyright © 2020-2023  润新知