美文网首页
单例模式不同写法

单例模式不同写法

作者: 佛系猿 | 来源:发表于2019-03-21 12:21 被阅读0次

    饿汉式(上来就是干)

    优点:线程安全、调用效率高
    缺点:不能延时加载,不用的时候回浪费资源

    /**
     * @author wyd
     * @description 类加载的时候天然线程安全,不用加同步块
     * @date 2019/3/20 下午3:54
     */
    public class SingletonTest1 {
        private static SingletonTest1 instance = new SingletonTest1();
    
        private SingletonTest1() {
        }
    
        public static SingletonTest1 getInstance() {
            return instance;
        }
    }
    

    懒汉式(延时)

    • 单例对象延时加载
      优点:用的时候加载,资源利用高
      缺点:并发效率低
    public class SingletonTest2 {
        private static SingletonTest2 instance;
    
        private SingletonTest2() {
        }
    
        public static SingletonTest2 getInstance() {
            //如果同步块放到这里则会影响效率,如果存在对象直接返回
            if (instance == null) {//提高效率
                synchronized (SingletonTest2.class) {
                    if (instance == null) {//安全
                        instance = new SingletonTest2();
                    }
                }
            }
            return instance;
        }
    }
    
    • 静态内部类方式实现
      优点:调用getInstance的时候才会去加载静态内部类,而且是线程安全的,并发高效,延时加载
    public class SingletonTest3 {
        private SingletonTest3() {
        }
    
        private static class SingletlonInstance {
            private static final SingletonTest3 instance = new SingletonTest3();
        }
    
        public static SingletonTest3 getInstance() {
            return SingletlonInstance.instance;
        }
    }
    

    枚举实现

    优点:枚举自身就是单例模式,天然线程安全,同时可以避免反序列化和反射的漏洞
    缺点:无延时

    public enum SingletonEnum {
        INSTANCE;
    
        public void singletonOperation() {
            //相关操作
            System.out.println("我是枚举的单例啊啊啊啊啊");
        }
    }
    
    该如何用呢?
    • 单例的对象如果占用的资源少,不需要延时加载,枚举优于饿汉式
    • 单例的对象如果占用的资源大,需要延时加载,静态内部类优于懒汉式

    如果有问题,请留言,相互探探讨哦^

    上一篇-设计模式概述

    相关文章

      网友评论

          本文标题:单例模式不同写法

          本文链接:https://www.haomeiwen.com/subject/vuytvqtx.html