`
gatusso52
  • 浏览: 112273 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

比较完善的单例模式

JVM 
阅读更多
public class Singleton
{
private static final Singleton singleton = null;
private Singleton()
{
}
public static Singleton getInstance()
{
if (singleton== null)
{
synchronized (Singleton.class)
{
if (singleton== null)
{
singleton= new Singleton();
}
}
}
return singleton;
}
}

 

========================================================

但是涉及并发,上述代码也会有问题

因为jvm优化指令顺序,a在构造成功之前,可能instance就已经不为空。

此时b检查到非null,调用之,出错。

 

解决方案:

将instance设为volatitle(??????)

 

或者使用一个静态内部类:

public class Foo {
    // 似有静态内部类, 只有当有引用时, 该类才会被装载
    private static class LazyFoo {
       public static Foo foo = new Foo();
    }

    public static Foo getInstance() {
       return LazyFoo.foo;
    }
} 
 

 

============================================================

对于java 还可以

public static synchronized Singleton getInstance() {   }

 或者更简单的

private static final Singleton sample = new Singleton();
 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    使用单例模式实现计数器

    其中,单例模式是一种非常经典且常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。在C#中,我们可以利用单例模式来创建一个计数器类,以确保在整个应用程序的生命周期内,计数器只...

    Qt使用MVC、数据库单例模式实现登录注册

    总的来说,Qt结合MVC、SQLite3和单例模式,为开发功能完善的登录注册系统提供了强大的支持。这种实现方式不仅可以提高代码的可维护性和复用性,还能够确保数据的一致性和安全性。在实际开发中,还可以根据需求扩展...

    JAVA单例模式的登录案例

    根据给定的信息,我们可以深入探讨Java单例模式的登录案例,并从中提炼出多个重要的知识点。 ### 单例模式概述 单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式通常...

    Qt单例模式实现Mysql数据库的链接,增加,删除,修改,查询

    在本文中,我们将深入探讨如何使用Qt框架中的单例模式来实现Mysql数据库的连接,以及如何进行数据的增删改查操作。首先,我们需要理解单例模式的概念,它是设计模式的一种,确保一个类只有一个实例,并提供全局访问...

    宠物医院,应用MVC模式!

    你提到在前人基础上进行了部分改进,这可能包括但不限于优化性能、增加新功能(如在线支付、用户评价系统)、完善错误处理和日志记录等。 综上,宠物医院项目是一个全面展示Java Web开发技术的实例,通过MVC模式...

    设计模式大作业.zip

    在“设计模式大作业.zip”这个压缩包中,我们看到了一系列使用了多种设计模式实现的代码示例,这包括简单工厂模式、工厂方法模式、单例模式、门面模式以及策略模式。接下来,我们将深入探讨这些设计模式及其在实际...

    多种设计模式(单例,享元,工厂,策略,模板)和多种数据结构(array,List,dictionary,queue)混合使用的数据结构期末项目.

    例如,他们可能用单例模式管理全局资源,用工厂模式创建不同类型的对象,用策略模式处理不同场景下的算法选择,用模板方法模式定义一个通用的处理流程,并用数据结构(如List和Dictionary)来组织和操作数据。...

    基于c++11的轻量级Web并发服务器,基于小根堆实现了定时器,利用单例模式与阻塞队列实现异步的日志系统.zip

    C++是C语言的继承,进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 在C基础上,一九八三年...

    Python技术设计模式与实践.docx

    单例模式是Python中最常用的设计模式之一,它的主要目的是确保一个类只创建一个实例,并提供一个全局访问该实例的唯一入口。这种模式特别适用于那些需要集中管理的资源,例如数据库连接池或者日志管理器。 **应用...

    java模式,设计模式,多种设计模式

    - **单例模式**(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。 ##### 5.2 结构型模式 结构型模式关注如何将类和对象组合起来以形成更复杂的结构。它可以进一步分为类模式和对象模式。 -...

    C++、MFC源代码Singleton_demo

    MFC中,单例模式的应用可能会结合C++的实现,并可能利用MFC的消息机制、类工厂等特性来进一步完善单例的创建和生命周期管理。 总结来说,这个项目提供了一个学习和实践C++和MFC中单例模式的实例,通过对"说明.htm"...

    java 设计模式类图

    单例模式(Singleton Pattern):单例模式确保一个类只有一个实例,并提供一个全局访问点。UML类图中,单例模式包含单例类Singleton,该类有一个静态方法getInstance用于获取唯一的单例对象。 迭代器模式(Iterator...

    js设计模式

    - **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。 - **观察者模式**:定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - **策略模式**:...

    JAVA 24种设计模式介绍与6大设计原则.pdf

    创建型模式关注对象创建机制,为对象实例化提供指导,包括单例模式、抽象工厂模式、建造者模式、工厂方法模式、原型模式和生成器模式等。结构型模式关注类或对象的组合,通过使用继承来组合接口或实现,例如适配器...

    js 模式学习(英文)

    1. **创建型模式**:如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。这些模式主要关注对象的创建机制,使得系统在不指定具体类的情况下,可以创建多个产品族的对象。 2. **结构型模式**:如适配器...

Global site tag (gtag.js) - Google Analytics