`

单例实现(转)

    博客分类:
  • JAVA
 
阅读更多
http://freish.iteye.com/blog/1008304

在JDK1.5及其后续版本中,扩充了volatile语义,系统将不允许对 写入一个volatile变量的操作与其之前的任何读写操作 重新排序,也不允许将 读取一个volatile变量的操作与其之后的任何读写操作 重新排序。



在jdk1.5及其后的版本中,可以将instance 设置成volatile以让双重检查锁定生效,如下:

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;

    }

}




需要注意的是:在JDK1.4以及之前的版本中,该方式仍然有问题。
分享到:
评论

相关推荐

    c++单例模式线程日志类

    在这个特定的场景中,我们讨论的是一个实现了单例模式的日志类,该类专为多线程环境设计,具备日志等级控制、精确的时间戳以及可变长参数和标准格式化输出的功能。 首先,让我们深入了解单例模式。单例模式的主要...

    设计模式之单例模式Java实现和类设计图

    在Java中,实现单例模式有多种方法,包括懒汉式(线程不安全)、饿汉式、双重检查锁定(DCL)以及枚举方式。其中,DCL和枚举方式是推荐的,因为它们既保证了线程安全,又避免了不必要的同步开销。 单例模式的Java...

    浅议单例模式之线程安全(转)

    单例模式是软件设计模式中的一种经典模式,它限制了类的...在实际应用中,应根据项目需求选择适合的单例实现方式,考虑到性能和线程安全等因素。同时,理解并掌握这些实现方式有助于提升编程技能和解决实际问题的能力。

    C#创建窗体的单例模式

    本文将深入探讨如何在C# WinForm应用中实现窗体的单例模式。 首先,理解单例模式的基本原理。单例模式的核心在于限制类的实例化过程,通常通过私有构造函数和静态工厂方法来实现。在C#中,我们可以创建一个静态私有...

    第五讲单例模式

    - **枚举类型**(Enum):这是Java中最简洁且线程安全的单例实现方式。 ```java public enum Singleton { INSTANCE; public void whateverMethod() { } } ``` 在实际开发中,单例模式常用于配置管理、缓存、...

    ava常用设计模式-单例模式

    单例模式有多种实现方式,以下是四种常见的实现方式: 1. 饿汉式 饿汉式是最简单的单例模式实现方式。其优点是没有加锁,执行效率会提高。但是,它的缺点是类加载时就初始化,浪费内存。 ``` public class ...

    javaweb项目+设计模式(单例模式,工厂模式,动态代理,适配器)

    在Java中实现单例模式有多种方法,包括懒汉式(线程不安全)、饿汉式(线程安全)、双重检查锁定(DCL,线程安全)以及枚举单例。确保单例模式正确实现的关键在于防止多线程环境下的多次实例化和序列化/反序列化时的...

    Python单例模式的两种实现方法

    接下来,我们将详细介绍两种实现Python单例模式的方法。 **方法一:双重检查加锁** 这种方法的关键在于“双重检查”和“线程安全”。首先,我们定义一个类`Singleton`,并初始化一个类级别的变量`__instance`来...

    Stats:一个简单的统计计数器,实现为单例

    一个实现为单例的简单统计计数器。 概述 统计计数器在实时环境中用于映射行为以及对项目进行计数很有用。 它应该允许从系统中的任何位置添加或更新任何计数器。 这是一个实现为单例的简单统计计数器。 计数类型为...

    winform序列化 md5加密 单例模式(无视频).rar

    典型的单例实现可能包含`private static`变量存储单例实例,以及一个`public static`方法返回这个实例。单例模式常用于资源管理,例如数据库连接、日志记录器或者配置管理。 在WinForms应用程序中,序列化可能用于...

    乐在其中设计模式(C#)-单例模式(SingletonPattern)[收集].pdf

    在C#中,实现单例模式通常有多种方法,这里展示的是通过泛型实现的单例模式。 代码示例中的`Singleton<T>`类是一个泛型类,它定义了一个静态成员`Instance`,用于返回类的实例。内部嵌套的静态类`SingletonCreator`...

    Java之单例模式&&NIO

    在给定的代码示例中,我们看到了两种常见的单例实现方式:懒汉式和饿汉式。 **懒汉式单例模式**: 懒汉式单例的特点是延迟初始化,即只有在第一次调用`getInstance()`方法时才会创建单例对象。这种方式在Java中通常...

    Java实现多个wav文件合成一个的方法示例

    在上面的代码中,我们使用了单例设计模式来实现`WavMergeUtil`类的实例化。在Java中,单例设计模式是一种常用的设计模式,用于确保类的实例化只有一个。 知识点7:Java中的多线程编程 在上面的代码中,我们没有...

    Example-TypeScript-Singleton-Pattern:TypeScript 和单例模式

    在 TypeScript 中,我们可以利用静态属性和私有构造函数来实现单例模式,从而确保类的唯一性。以下是对这个"Example-TypeScript-Singleton-Pattern"项目的详细解析。 1. **TypeScript 基础知识**: TypeScript 是 ...

    设计原则(责任链,桥接,适配器,单例,命令)

    在给定的标题和描述中,提到了五个关键的设计原则:责任链模式、桥接模式、适配器模式、单例模式以及命令模式。这些模式都是面向对象设计中的经典模式,对iOS开发尤其重要,因为它们可以帮助我们更好地组织代码,...

    设计模式:创建型之原型(深浅拷贝)、单例(饿汉式与懒汉式),三大工厂模式 结构型之适配器模式,代理模式(三大代理)

    在描述中还提到了单例模式的两种实现方式:饿汉式和懒汉式。饿汉式在类加载时就完成了对象的初始化,懒汉式则是在第一次调用获取实例的方法时才创建对象。饿汉式简单且线程安全,但可能导致资源浪费;懒汉式节省资源...

    新技术培训 培训讲义9_设计模式之单例适配器和工厂模式.doc

    在这个文档中,我们看到了一个简单的动物类接口,包含 `run()`, `swim()`, `fly()` 方法,然后有一个适配器类实现了这些方法,但只在鸟类子类中实现了 `fly()` 方法,这样就可以让不同的动物类型适应统一的接口。...

    设计模式:基于C#的工程化实现及扩展(完整电子版)

    C#中的静态类和 sealed 关键字可以方便地实现单例模式。工厂模式则用于创建对象,它将对象的创建过程抽象化,使得系统在不指定具体类的情况下也能创建对象。C#中的抽象工厂类和接口可以很好地支持这种模式。 装饰器...

Global site tag (gtag.js) - Google Analytics