`

单例实现(转)

    博客分类:
  • 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 ...

    Kotlin中的5种单例模式示例详解,kotlink入门讲解

    Kotlin与Java在单例模式的实现上有所不同,接下来我们将探讨Kotlin中实现单例模式的五种方法。 首先,Kotlin中的单例模式可以使用object关键字来实现,这被称为对象声明。对象声明是一种在Kotlin中定义单例的方式,...

    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中通常...

    c++文字转语音.zip

    本项目“c++文字转语音.zip”提供了一种无需依赖额外库的解决方案,使得开发者可以直接在自己的C++项目中实现这一功能。下面我们将详细探讨相关的知识点。 1. **文字转语音(TTS)技术**: TTS,全称Text-to-...

    Java实现的面向对象设计模式示例,创建者、抽象工厂、工厂方法、原型、单例、适配器、桥接、组合、装饰器、备忘录等等.zip

    在Java中实现这些设计模式可以提高代码的可读性、降低系统复杂度,并有助于软件的后期维护和扩展。 创建者(Builder)模式是一种用于创建复杂对象的结构型模式。它将对象的构建与表示分离,使得同样的构建过程可以...

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

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics