美文网首页
JAVA设计模式-单例

JAVA设计模式-单例

作者: 汤姆torn | 来源:发表于2022-12-06 14:20 被阅读0次

保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式(Singleton)的目的是为了保证在一个进程中,某个类有且仅有一个实例。

  1. 饿汉式
    在声明之初就指定对象实例化。
public class Singleton {
    // 静态字段引用唯一实例:
    private static final Singleton INSTANCE = new Singleton();

    // private构造方法保证外部无法实例化:
    private Singleton() {
    }
    // 通过静态方法返回实例:
    public static Singleton getInstance() {
        return INSTANCE;
    }
}

2.懒汉式
在真正调用的时候才实例化对象。

public class Singleton {
    private static Singleton INSTANCE = null;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new Singleton();
        }
        return INSTANCE;
    }
}

在单线程下这种懒汉式是没有问题的,但是在多线程下这种方式是线程不安全的,饿汉式会有JVM实例化替我们保证线程安全,懒汉式要进行以下改造。

public 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;
    }
}

为什么要这么做呢?
因为实例化表面上看起来是一个语句,但是里面涉及到了分配内存空间,初始化对象,将对象指向刚分配的内存空间的操作。有些编译器为了性能的原因,可能会将第二步和第三步进行重排序,那么使用volatile后重排序被禁止,所有的写(write)操作都将发生在读(read)操作之前。

3.内部类

public class Singleton {

    private Singleton() { 
    }

    private static class SingletonHolder {
        private static Singleton instance = new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonHolder.instance;
    }
}

内部类这种形式支持懒加载,也线程安全,推荐使用

相关文章

  • JAVA设计模式 - 单例模式

    JAVA设计模式 - 单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一...

  • Java中单例模式你用的哪一种?

    一起讨论java中的单例模式。单例模式是java设计模式中算是最简单的设计模式了。 * java实现单例模式的写法...

  • 单例模式

    JAVA设计模式之单例模式 十种常用的设计模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法...

  • JAVA设计模式之单例模式

    JAVA设计模式之单例模式

  • 设计模式

    Java 设计模式情景分析 ——单例模式 Java 设计模式情景分析——建造者模式 Java 设计模式情景分析——...

  • 设计模式——单例模式

    设计模式——单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,这种类型...

  • Java设计模式教程

    Java设计模式教程 Java工厂设计模式 Java抽象工厂模式 Java单例模式 Java建造者(Builder...

  • 设计模式

    单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式...

  • 设计模式(二)——创建型模式

    一、 单例模式 1. 什么是单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模...

  • Java四种单例设计模式

    Java中的四种单例模式 单例模式是最容易理解的设计模式之一,介绍Java中单例模式的四种写法。 1.基本单例模式...

网友评论

      本文标题:JAVA设计模式-单例

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