• 单例模式


    1.概念:

    确保一个类只有一个实例,并提供全局访问点。

    2.实现

    2.1 预加载

    public class Singleton {
        private static Singleton singleton = new Singleton();
        private Singleton() {}
        
        public Singleton getInstance() {
            return singleton;
        }
        
    }

    在类进行初始化的时候创建对象,没有线程安全问题。

    2.2 懒加载

    虽然有很多种方法,个人比较喜欢静态内部类实现的方法,简单又安全。

    public class Singleton2 {
        private Singleton2() {}
        
        private static class SingletonHandler{
            private static final Singleton2 INSTANCE = new Singleton2();
        }
        
        public static Singleton2 getInstance() {
            return SingletonHandler.INSTANCE;
        }
    
    }

    必要情况下枚举也可是实现。

    3.测试

    测试是否线程安全

    public static void main(String[] args) {
            ExecutorService exec = Executors.newCachedThreadPool();
            for (int i = 0; i < 10000; i++) {
                exec.execute(()->{
                    System.out.println(Singleton2.getInstance());
                });
            }
            exec.shutdown();
        }

    反复测试,这两个类实现的单例都是线程安全的。

  • 相关阅读:
    学期总结
    第一次博客作业
    C语言博客作业08
    C语言博客作业07
    C语言博客作业06
    C语言博客作业05
    c语言l博客作业04
    C语言II博客作业04
    C语言II博客作业03
    C语言II博客作业02
  • 原文地址:https://www.cnblogs.com/lishuaiqi/p/10922446.html
Copyright © 2020-2023  润新知