单例模式

概念

java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式模式,饿汉式模式、登记式单例三种。
单例模式有以下特点:

  1. 单例类只能有一个实例;
  2. 单例类必须自己创建自己的唯一实例;
  3. 单例类必须给所有其他对象提供这一实例。
    单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同事输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信接口,以避免一个通信端口与同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态。

四种线程安全的java单例

public class Singleton1 {

    private static final Singleton1 single = new Singleton1();

    private Singleton1() {

    }

    public static Singleton1 getInstance() {
        return single;
    }

}
public class Singleton2 {

    private static Singleton2 instance = null;

    private Singleton2() {

    }

    public synchronized static Singleton2 getInstance() {
        if (instance == null) {
            instance = new Singleton2();
        }
        return instance;
    }


}
public class Singleton3 {

    private static Singleton3 instance = null;

    private Singleton3() {
    }

    public static Singleton3 getInstance() {
        if (null == instance) {
            synchronized (Singleton3.class) {
                if (null == instance) {
                    instance = new Singleton3();
                }
            }
        }
        return instance;
    }
}
public class Singleton4 {

    private Singleton4() {
    }

    private static final class SingletonHolder {
        private static final Singleton4 INSTANCE = new Singleton4();
    }

    public static final Singleton4 getInstance() {
        return SingletonHolder.INSTANCE;
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 9,734评论 4 34
  • 单例模式(Singleton):在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有...
    _SHYII阅读 4,363评论 0 2
  • 概念:Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登...
    陈小飘阅读 2,548评论 0 0
  • 本文为转载,原文:C#实现设计模式 —— 单例模式 介绍 作为对象的创建模式,单例模式确保某一个类只有一个实例,而...
    ChainZhang阅读 3,555评论 0 1
  • 「兄ちゃん、時代が変わったといっても時代に会う生き方をしないと時代に乗り遅れるよ」 “哈~?纳尼?” 「時代が変わ...
    bravo1988阅读 2,299评论 0 3