栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 单例设计模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 关键字禁止重排序。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/685704.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号