`
article2008
  • 浏览: 71783 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

singleton模式安全

阅读更多
单例模式的一般例子:

public class Singleton{

private static Singleton instance = null;

public static  Singleton getInstance(){

if(instance == null){

instance  = new Singleton();

}

return instace;

}

}假设这样一个场景,有两个线程调用Singleton.instance(),首先线程一判断instance是否等于null,判断完后一瞬间虚拟机把线程二调度为运行线程,线程二再次判断instance是否为null,然后创建一个Singleton实例,线程二的时间片用完后,线程一被唤醒,接下来它执行的代码依然是instance = new Singleton();
两次调用返回了不同的对象,出现问题了。
解决方案:(1)类被载入时就初始化这个对象:private static Singleton instance = new Singleton();
JLS(Java Language Specification)中规定了一个类只会被初始化一次,所以这样做肯定是没问题的。

但是如果要实现延迟初始化(Lazy initialization),比如这个实例初始化时的参数要在运行期才能确定
(2)使用synchronized关键字修饰初始化方法:

public synchronized static Singleton getInstace() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}


分享到:
评论

相关推荐

    C++完美实现Singleton模式

    ### C++中实现Singleton...在C++中实现Singleton模式时,需要注意的关键点包括但不限于资源管理、线程安全以及如何有效地减少重复代码。正确应用这些技术可以使Singleton模式更加健壮和高效,从而提高整体代码的质量。

    C++ 实现的singleton 模式

    **C++实现的Singleton模式详解** Singleton模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源,如数据库连接池,或者确保某个...

    (创建型模式)Singleton模式

    Singleton模式是设计模式中的一种创建型模式,它在软件工程中扮演着重要的角色。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点来获取这个唯一的实例。Singleton模式的应用场景通常涉及到系统...

    Java的Singleton模式代码(免资源分)

    ### Java的Singleton模式详解 #### 一、Singleton模式概述 Singleton模式是一种常用的设计模式,在Java中主要用于确保一个类只有一个实例,并提供一个全局访问点。这种模式对于管理共享资源(如数据库连接池、...

    Java线程安全的Singleton模式:深入分析与实现

    线程安全的Singleton模式对于多线程环境尤为重要,因为它可以防止多个线程同时创建多个实例。本文将详细介绍如何在Java中创建线程安全的Singleton,包括几种常见的实现方式和最佳实践。 在Java中创建线程安全的...

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    这里我们将深入探讨三种常见的Java设计模式:单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。 **单例模式(Singleton)** 单例模式确保一个类只有一个实例,并提供一个全局访问点...

    最简单的设计模式学习Singleton模式

    2. **静态内部类**:在Java中还可以使用静态内部类的方式实现线程安全的Singleton模式,这种方式简洁且高效,无需手动加锁。 #### 五、总结 Singleton模式是一种简单而强大的设计模式,能够有效地控制类的实例数量...

    Singleton模式源程序

    描述中提到的“多线程的实现”意味着Singleton模式需要考虑线程安全问题。在多线程环境中,如果没有正确的同步机制,可能会出现多个线程同时创建Singleton实例的情况。解决这个问题的方法有几种: 1. 静态初始化:...

    C#设计模式之Singleton模式

    Singleton模式虽然简单,但在实现时需要注意线程安全问题,尤其是在多线程环境下。通过合理的同步机制如`lock`、静态构造器或`Lazy<T>`,我们可以确保Singleton模式在各种场景下都能正确工作。理解并灵活运用这些...

    singleton设计模式java实现及对比

    在Java中,Singleton模式的实现有多种方式,每种方式都有其优缺点,我们将详细探讨这些实现方法并进行对比。 ### 1. 饿汉式(Static Final Field) 这是最简单的Singleton实现方式,通过静态初始化器在类加载时就...

    java Singleton单例模式

    接下来,我们将深入探讨Java Singleton模式的实现方式、优缺点以及使用场景。 一、Singleton模式的实现 1. 饿汉式(静态常量) ```java public class Singleton { private static final Singleton INSTANCE = ...

    Singleton模式

    Singleton模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这个模式在许多场景下非常有用,比如配置管理、日志服务、线程池等,需要确保全系统内只有一个对象来处理特定任务的情况...

    深入浅出单例Singleton模式

    【深入浅出单例Singleton模式】 单例模式是一种在软件设计中常见的设计模式,它的核心目标是确保一个类只有一个实例,并提供一个全局访问点。在Java等面向对象编程语言中,单例模式常用于控制资源的共享,如全局...

    C#面向对象设计模式纵横谈-1.Singleton 单件(创建型模式)

    Singleton模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个唯一的实例。这种模式在需要控制资源的唯一性或者全局访问点时非常有用,比如数据库连接、线程池或者缓存管理等。 ...

    Singleton 单例模式

    Singleton 单例模式是软件设计模式中的一种,它限制了类的实例化过程,确保一个类在整个系统中只有一个实例存在。这种模式常用于系统资源管理,比如数据库连接、线程池或者缓存服务等,因为这些资源往往需要全局共享...

    singleton单例模式

    - `singleton.cpp`包含了单例类的实现,可能包括了上述的某一种或多种单例模式的实现。 - `main.cpp`是程序的入口,可能会在其中调用单例对象进行测试。 - `mainwindow.cpp`和`mainwindow.h`可能是UI界面的实现和...

    Singleton pattern单例模式应用

    // 懒汉式单例模式实现(线程安全) public class LazySingleton { private static volatile LazySingleton instance; private LazySingleton() {} public static synchronized LazySingleton getInstance() { ...

    Android Singleton单例模式Demo

    在Android中,Singleton模式的应用场景包括但不限于: 1. 应用程序配置管理:例如,一个AppConfig类用于存储和管理应用的全局配置信息。 2. 数据库连接管理:在多线程环境下,共享数据库连接池以提高性能和减少资源...

Global site tag (gtag.js) - Google Analytics