zoukankan      html  css  js  c++  java
  • Java中的单例模式

    在软件工程中,单例模式是一种软件设计模式,它将类的实例化限制为一个“单个”实例。当恰好需要一个对象来协调整个系统中的动作时,这很有用。

    通常,这是通过以下方式完成的:

    •   声明该类的所有构造函数为私有
    •   和提供一个静态方法,该方法返回对该实例的引用

    饿汉式:该实例通常存储为私有静态变量。在初始化变量时,即在首次调用静态方法之前的某个时刻,创建了实例。以下是用Java编写的示例实现。

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

    懒汉式:单例实现可以使用延迟初始化,在首次调用静态方法时创建实例。如果可能同时从多个线程调用静态方法,则可能需要采取措施来防止可能导致创建该类的多个实例的竞争条件。以下是使用Java编写的使用带双重检查锁定的延迟初始化的线程安全示例实现。

    public final class Singleton {
    
        private static volatile Singleton instance = null;
    
        private Singleton() {}
    
        public static Singleton getInstance() {
            if (instance == null) {
                synchronized(Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
    
            return instance;
        }
    }

     总结:

    •   单例模式通过私有构造函数并提供一个静态方法返回该实例
    •   单例模式分为懒汉式和饿汉式
    •   饿汉式在Class加载的时候就创建了该实例,不会出现线程安全的问题
    •   懒汉式是在程序调用的时候创建实例,会出现线程安全的问题

    参考网站:https://en.wikipedia.org/wiki/Singleton_pattern

  • 相关阅读:
    Python爬虫之selenium各种注意报错
    以后的路还很长
    巧学DBhelper
    怎么学习程序语言
    C# winform 实现图片轮播
    P6477 [NOI Online #2 提高组]子序列问题(民间数据) 题解
    NOI Online Round 2 TG 游记
    「EZEC」 Round1 开学信心赛 游记
    P6023 走路 题解
    P6022 快乐水 题解
  • 原文地址:https://www.cnblogs.com/crelle/p/13961565.html
Copyright © 2011-2022 走看看