资讯专栏INFORMATION COLUMN

设计模式之【单例模式】

idisfkj / 1940人阅读

摘要:基本的单例模式实现方式但是不足之处是,的创建时间不受控制。结合两种单例模式的实现方式这种方式没有加锁,在并发模式下性能优越,而且只有在方法被第一次调用时,实例才会被创建。高并发程序设计第章并行模式与算法

基本的单例模式实现方式
public class Singleton {
    
    private Singleton () {
        System.out.println("Singleton is created");
    }
    
    private static Singleton instance = new Singleton();
    
    public static Singleton getInstance () {
        return instance;
    }
    
}

但是不足之处是,Singleton的创建时间不受控制。对于静态成员instance, 它会在类第一次初始化的时候被创建,但这个时刻并不一定是getInstance()方法第一次被调用的时候。例如:

public class Singleton {

    public static int STATUS = 1;
    
    private Singleton () {
        System.out.println("Singleton is created");
    }
    
    private static Singleton instance = new Singleton();
    
    public static Singleton getInstance () {
        return instance;
    }
    
}

注意这里的单例包含一个静态成员STATUS, 此时在任意地方引用这个STATUS都会导致Singleton这个类被初始化,并创建instance实例。

延迟加载的单例模式实现方式
public class LazySingleton {
    
    private LazySingleton() {
        System.out.println("Singleton is created");
    }
    
    private static LazySingleton instance = null;
    
    public static synchronized LazySingleton getInstance() {
        if (instance == null)
            instance = new LazySingleton();
        return instance;
    }

}

这样在调用getInstance()方法的时候才会创建单例对象。但是坏处是在并发环境下加锁,会对性能产生影响。

结合两种单例模式的实现方式
public class StaticSingleton {

    private StaticSingleton() {
        System.out.println("Singleton is created");
    }
    
    private static class SingletonHolder {
        private static StaticSingleton instance = new StaticSingleton();
    }
    
    public static StaticSingleton getInstance() {
        return SingletonHolder.instance;
    }
    
}

这种方式没有加锁,在并发模式下性能优越,而且只有在getInstance()方法被第一次调用时,StaticSingleton实例才会被创建。

《Java高并发程序设计》第5章 · 并行模式与算法

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70239.html

相关文章

  • 大话PHP设计模式单例模式

    摘要:上面是简单的单例模式,自己写程序的话够用了,如果想继续延伸,请传送至大话设计模式之单例模式升级版 看了那么多单例的介绍,都是上来就说怎么做,也没见说为什么这么做的。那小的就来说说为什么会有单例这个模式以便更好的帮助初学者真正的理解这个设计模式,如果你是大神,也不妨看完指正一下O(∩_∩)O首先我不得不吐槽一下这个模式名字单例,初学者通过字面很难理解什么是单例,我觉得应该叫唯一模式更贴切...

    VEIGHTZ 评论0 收藏0
  • Java 设计模式单例模式

    摘要:在设计模式一书中,将单例模式称作单件模式。通过关键字,来保证不会同时有两个线程进入该方法的实例对象改善多线程问题为了符合大多数程序,很明显地,我们需要确保单例模式能在多线程的情况下正常工作。 在《Head First 设计模式》一书中,将单例模式称作单件模式。这里为了适应大环境,把它称之为大家更熟悉的单例模式。 一、了解单例模式 1.1 什么是单例模式 单例模式确保一个类只有一个实例,...

    everfight 评论0 收藏0
  • 大话PHP设计模式单例模式升级版

    摘要:用来指向已创建好的实例构造函数为空注意这里是关键这是我们需要调用的方法把函数也定义为空,这样就大功告成啦。 接上一篇大话PHP设计模式之单例模式 这一篇介绍一下升级版的单例模式,废话不说先上代码 不完美的单例模式 class singleMode { //用来指向已创建好的实例 public static $instance; //判断是...

    darcrand 评论0 收藏0
  • Java基础学习——多线程单例设计模式(转)

    摘要:总之,选择单例模式就是为了避免不一致状态,避免政出多头。二饿汉式单例饿汉式单例类在类初始化时,已经自行实例化静态工厂方法饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。 概念:  Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍两种:懒汉式单例、饿汉式单例。  单例模式有以下特点:  1、单例类只能有一个实例。 ...

    dendoink 评论0 收藏0
  • JavaScript设计模式与开发实践系列单例模式

    摘要:本系列为设计模式与开发实践作者曾探学习总结,如想深入了解,请支持作者原版单例模式实现单例模式单例模式的定义是保证一个类仅有一个实例,并提供一个访问它的全局访问点。 本系列为《JavaScript设计模式与开发实践》(作者:曾探)学习总结,如想深入了解,请支持作者原版 单例模式 实现单例模式 单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式是一种常用的模式...

    Airy 评论0 收藏0
  • 每天一个设计模式单例模式

    摘要:博主按每天一个设计模式旨在初步领会设计模式的精髓,目前采用靠这吃饭和纯粹喜欢两种语言实现。单例模式用途如果一个类负责连接数据库的线程池日志记录逻辑等等,此时需要单例模式来保证对象不被重复创建,以达到降低开销的目的。 博主按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript(_靠这吃饭_)和python(_纯粹喜欢_)两种语言实现。诚然,每种设计模式都有多种实...

    yy736044583 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<