`

单实例模式

    博客分类:
  • Flex
阅读更多

1. 经典的单实例模式例子(非线程安全):
public class Singleton {
private static Singleton uniqueInstance;

// other useful instance variables here

private Singleton() {}

public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}

// other useful methods here
}
本例是最经典的单实例模式例子,但是在多线程的情况下就会产生多个实例!


2. 线程安全的例子:
public class Singleton {
private static Singleton uniqueInstance;

// other useful instance variables here

private Singleton() {}

public static synchronized Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}

// other useful methods here
}
增加synchronized,会让该方法是线程安全的,但是会引起每个线程在调用该方法时的等待,如果getInstance的性能对应用程序不是很关键(记住,同步方法可能会使getInstance方法得运行效率降低100倍),本方法是最好得方法!


3. 提前实例化,不适用延迟实例化(使用于创建和运行时负担不太繁重或者应用程序总是创建并使用单件实例),它是线程安全的:
public class Singleton {
private static Singleton uniqueInstance = new Singleton();

// other useful instance variables here

private Singleton() {}

public static Singleton getInstance() {
return uniqueInstance;
}

// other useful methods here
}
采用这种方法,我们依赖JVM在加载这个类时候马上创建此唯一实例,JVM保证在任何线程访问它之前,一定先创建它!


4. 在java1.5及以后的版本,增加了volatile关键字,可以采用双重检查加锁!
public class Singleton {
private volatile static Singleton uniqueInstance;

private Singleton() {}

public static Singleton getInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
volatile关键字确保:当unigueInstance变量在被初始化成实例时,多个线程能够正确的处理它!(对于关注性能的程序,这种做法可以大大减少时耗)

分享到:
评论

相关推荐

    设计模式——单实例模式、单件模式——Java编写

    单实例模式是软件设计模式中的一种,它的核心思想是确保一个类在整个系统运行过程中只有一个实例存在,并提供一个全局访问点,以保证所有对该类对象的访问都指向这个唯一的实例。这种模式在Java中广泛应用于配置管理...

    单实例模式介绍及应用

    单实例模式是一种设计模式,它的核心思想是限制一个类只能创建一个实例,并提供全局访问点。这种模式在软件开发中广泛应用于需要管理共享资源或控制类的实例化次数的场景。 单实例模式的特点如下: 1. 唯一性:确保...

    java单例模式实例

    单例模式是软件设计模式中的一种经典模式,用于确保一个类只有一个实例,并提供一个全局访问点。在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们...

    java面向对象编程单实例模式解析

    ### Java面向对象编程中的单实例(Singleton)模式解析 #### 概述 在Java面向对象编程中,单实例模式(也常称为单例模式或Singleton模式)是一种常用的创建型设计模式,它确保一个类只有一个实例,并提供一个全局...

    C++单实例模式示例代码

    ### C++单实例模式详解与示例代码解析 #### 单例模式概述 单例模式是一种常见的设计模式,主要用于确保一个类只有一个实例,并提供一个全局访问点。这种模式广泛应用于各种场景,例如系统配置管理、日志记录、...

    单实例模式数据库连接池

    ### 单实例模式数据库连接池 #### 概述 单实例模式数据库连接池是一种软件设计模式,主要用于提高数据库访问效率并降低系统资源消耗。在该模式下,整个应用程序仅创建一个数据库连接池实例,所有数据库操作共享这...

    JAVA中单例模式的几种实现方式.doc

    为了保证单例模式在多线程环境下的正确性,可以在`getInstance()`方法上加上`synchronized`关键字,以确保同一时间只有一个线程能够执行该方法,从而避免创建多个实例。 ```java public class Singleton { private...

    C#采用桥接装饰模式工厂模式单实例模式实现绘图

    单例模式确保一个类只有一个实例,并提供全局访问点。在绘图软件中,可能有一个全局的画布或者工具箱,需要在整个应用生命周期中保持唯一。使用单例模式,可以保证在任何情况下都只有一个画布或工具箱对象存在,避免...

    基于php设计模式中单例模式的应用分析

    单例模式是软件设计模式中的一种,它的核心思想是确保某个类在整个应用程序中只有一个实例存在。在PHP中,单例模式常用于管理共享资源,如数据库连接或全局配置,以优化性能并提供统一的访问入口。 单例模式的实现...

    C#描述中的单例与多例模式

    多例模式是单例模式的一种扩展形式,它允许根据不同的条件创建多个实例,每个实例仍然是唯一的,但可以根据不同的需求创建不同的实例。 #### 多例模式的特点 1. **为特定条件创建唯一的实例**:与单例模式不同的是...

    c++中单例模式对象的释放控制

    在C++编程领域,设计模式是解决特定问题的模板,其中单例模式(Singleton Pattern)是一种常用的创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。然而,在C++中实现单例模式时,如何正确管理这个...

    Go语言中单例模式的不同线程安全实现及其应用场景

    适合人群:对 Go 编程有一定了解,想要深入理解并发环境下单例模式高效安全实现机制的研发工程师。 使用场景及目标:为开发者提供在不同性能、同步语义等约束条件下选用最合适单例模式实现的最佳实践指导。 其他说明...

    设计模式 单件模式 设计模式 单件模式

    单件模式是指确保整个应用程序中只有一个类实例且这个实例所占资源在整个应用程序中是共享的程序设计方法。单件模式是一种非常实用的设计模式,它可以控制一个类的实例数量,使得调用者可以从一个公共的众所周知的...

    Activity启动模式实例

    本示例项目"Activity启动模式实例"深入探讨了四种主要的Activity启动模式:标准模式(Standard)、单实例模式(SingleInstance)、单任务模式(SingleTask)和单栈顶模式(SingleTop)。以下是对这四种启动模式的...

    java设计模式之多类java-设计模式之:多例(Multiton)模式

    java设计模式之多例(Multiton)模式是对象的创建模式之一,多例模式中的多例类可以有多个实例,且多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。多例模式的特点是:多例类可以有多个实例,多例类必须...

    启动模式实例

    本实例将深入探讨四种主要的启动模式:标准模式(standard)、单例模式(singleTop)、单任务模式(singleTask)以及单实例模式(singleInstance),并通过具体案例来解释它们各自的特点。 1. **标准模式(standard...

    多例模式学习笔记

    单例模式确保一个类只有一个实例,而多例模式则允许一个类有多个实例,但通常数量是有限的。这种模式常用于资源管理,如数据库连接池、线程池等,它控制了特定类型对象的实例数量。 ### 1. 多例模式的概念 多例...

    java 中单例模式饿汉式与懒汉式的对比

    java 中单例模式是保证一个类仅有一个实例,并提供一个访问它的全局访问点的设计模式。单例模式有以下特点:单例类只能有一个实例,单例类必须自己自己创建自己的唯一实例,单例类必须给所有其他对象提供这一实例。 ...

    单例模式实现mdi界面子窗体控制

    首先向关注过我这个系列的同修们说声 对不起 昨天朋友孩子满月,去喝酒喝挂了,回家本想小睡一会又起来写代码,一...故名思议 即 让 类 永远都只能有一个实例。 由于 示例代码 比较简单 我也加了注释,这里就不在赘述

    单件模式 实例 模式 很好的例子

    模式 很好的例子模式 很好的例子模式 很好的例子模式 很好的例子模式 很好的例子设计模式的一 种单件 模式 很好的例子

Global site tag (gtag.js) - Google Analytics