zoukankan      html  css  js  c++  java
  • 单例设计模式实现的三种方式

    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();
            }
        }
    }
    

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

  • 相关阅读:
    poj2975(nim游戏取法)
    hdu5785(极角排序求所有锐角钝角个数)
    hdu5787(数位dp)
    划分树模板
    Struts配置文件
    Struts2 调用非execute方法
    Struts简单的实例
    Struts简介
    linux yum 命令
    Linux vi/vim
  • 原文地址:https://www.cnblogs.com/dataoblogs/p/14121982.html
Copyright © 2011-2022 走看看