Java 单例设计模式

Java 单例设计模式,第1张

Java 单例设计模式 简介

单例设计模式如其名,在系统中只存在一个实例,自行实例化供系统使用。(百度百科)每台计算机可以有若干传真卡,但是只应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情况。

饿汉式单例模式

饿汉式就是利用关键字 static 的特性。在类加载初始化时,就创建对象供外部使用,如果系统不重启的情况下,这个对象在系统中始终是唯一的。

public class EagerSingleton {
    
    private static final EagerSingleton instance = new EagerSingleton();

    
    private EagerSingleton(){}

    
    public EagerSingleton getInstance() {
        return this.instance;
    }
}
总结

饿汉式的优点是线程安全,因为类只会被加载一次,在类加载时就创建了对象。缺点是无论是否使用,在类加载时都会创建对象,所以占用的内存空间比较大。

懒汉式单例模式

懒汉式顾名思义,就是在需要的时候,再创建实例。


public class LazySingleTon {
    private static LazySingleTon instance;

    
    private LazySingleTon() {

    }

    
    public LazySingleTon getInstance() {
        if (instance == null) {
            this.instance = new LazySingleTon();
        }
        return instance;
    }
}
总结

懒汉式的优点是在需要时对象才会被创建,不会再未使用时占用内存空间,缺点是在多线程的系统下还是可能会被创建多个对象。

双检锁懒汉式单例模式

通过双重检查以及同步代码块创建的的饿汉式单例模式,保证在多线程系统中实例不会被多次创建

public class LazySyncSingleton {
    
    private volatile static LazySyncSingleton instance;

    
    private LazySyncSingleton(){};

    
    public LazySyncSingleton getInstance() {
        if (instance == null) {
            synchronized (LazySyncSingleton.class) {
                if (instance == null) {
                    instance = new LazySyncSingleton();
                }
            }
        }
        return instance;
    }
}
总结

通过同步代码块以及双重检查保证多线程系统下实例的唯一性,但是需要注意重拍续的问题,所以在定义需要加上 volatile 关键字禁止重排序。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5686256.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存