`
2007yn
  • 浏览: 44200 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

三种单利模式

阅读更多

模式一:

class Singleton2 {
 
 private Singleton2(){
 }
 
 private static Singleton2 instance;

 public static Singleton2 getInstance() {
  if(instance==null){
   instance=new Singleton2();
  }
  return instance;
 }

}

 

不用说,大家也知道,这种在单线程程序中是没什么问题的,但多线程程序中,则可能会创建出2个或多个对象.

不同步的话, 对于懒汉式的, 就是在, 这个类的实例还没有创建的时候, 2个线程同时去调用getInstance, 这时, 由于没有同步锁, 有可能会创建出2个实例来。
对于饿汉式, 由于实例是在load class的时候创建的, 所以就没有这个问题。 当然, 就是2个线程采用了不同的class loader.
当然, 无论饿汉还是懒汉, 几率都不高, 但几率低不代表不会出错, 逻辑上也不对, 因此, 编程者还是应该避免。

模式二:

public class Singleton {
 
 private Singleton(){
  
 }
 private static Singleton instance =new Singleton();
 
 public static Singleton getInstance(){
  return instance;
 }

}

 

这种很显然没有前者的问题.

模式三:

public class Singleton {

 private static class SingletonHolder {
  static Singleton instance = new Singleton();
 }

 public static Singleton getInstance() {
  return SingletonHolder.instance;
 }

}

 

在模式2中,不管我们是不是调用getInstance()都会存在一个实例在内存中,而在模式3中,
只有我们调用了getInstance(),才会创建唯一的实例到内存中.并且也解决了模式1中多线程的问题.
解决的方式是利用了Classloader的特性

分享到:
评论

相关推荐

    设计模式之单利设计模式

    #### 三、实现单例设计模式的方法 单例模式有多种实现方式,本文将重点介绍两种常见的实现方法:饿汉式和双重检查锁定。 ##### 饿汉式 饿汉式是一种简单且线程安全的实现方式。在这种模式中,单例对象在类加载时...

    Java多线程编程环境中单例模式的实现

    ### Java多线程编程环境中单例模式的实现 #### 概述 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式的应用非常广泛,特别是在资源管理、日志记录、...

    设计模式之:单利模式

    单利模式是软件设计模式中的一种,它保证了一个类只有一个实例,并提供一个全局访问点。这种模式在资源管理、缓存、日志记录等方面非常常见,因为它可以避免频繁创建和销毁对象带来的开销,提高系统性能。 单利模式...

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

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

    二十三种设计模式【PDF版】

    23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 建筑和软件中模式之异同 A. 创建模式 设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例...

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

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

    软件开发的二十三种设计模式

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。...通过学习提供的文档和示例,如"二十三种设计模式.doc"和"java~100例",可以深入理解并掌握这些设计模式的实际应用。

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

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

    单利模式例子

    这个例子中的“单利模式”可能指的是在C++环境中实现的单例模式,而“不是double click”可能是在说明这不是通过双击或者某种特定的用户交互来创建实例,而是通过编程逻辑来确保单例的存在。 首先,我们来看一下`...

    数据库的几种设计模式

    #### 三、名值模式 名值模式适用于那些在设计阶段难以确定所有属性的对象,尤其是当对象的属性在系统运行期间可能发生较大变化时。这种模式允许在运行时动态添加或更改对象的属性,从而提高了系统的灵活性。 **...

    unity中涉及的三种单例模式

    下面将详细介绍在Unity中涉及的三种单例模式:C#经典单例、Unity内置单例以及一种线程安全的改进版单例。 1. C#经典单例: 这是最常见的单例实现方式,通常通过私有构造函数和一个静态方法来保证只有一个实例。在...

    设计模式(工厂 单利)

    详细讲述了工厂,抽象工厂,单利模式!以及各种设计模式的简述,让你轻松掌握!

    java单例模式实例

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

    C#23种设计模式_示例源代码及PDF

    单例模式: 而且自行实例化并向整个系统提供这个实 单例模式 单例模式确保某一个类只有一个实例, 例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。 结构型模式 6、ADAPTER —在朋友聚会上碰到...

    设计模式_--_工厂模式和单件模式

    这里以懒汉式为例简要说明单例模式的实现: ```cpp class Singleton { private: static Singleton* instance; Singleton() {} // 私有构造函数 public: static Singleton* getInstance() { if (instance == ...

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

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

    43丨单例模式(下):如何设计实现一个集群环境下的分布式单例模式?1

    线程唯一的单例模式,又称为线程局部单例,是指在同一个线程内保证单例的唯一性,而在不同线程之间可以有各自的实例。实现线程唯一单例通常可以通过使用`ThreadLocal`变量。`ThreadLocal`为每个线程都维护了一个独立...

    5.2 MongoDB的三种集群模式1

    本文将深入探讨MongoDB的三种集群模式之一——主从(master-slave)集群。 主从集群是一种常见的分布式数据库架构,通常用于数据备份和读写分离。在主从架构中,有一个主节点(master)负责处理所有的写操作,并将...

    【Java设计模式】多例模式

    Java中的多例模式确保一个类只有唯一命名的实例,并提供对它们的全局访问点。... - 在软件工程中,多例模式是对单例模式的一种泛化。单例模式只允许创建一个类的实例,而多例模式允许受控地创建多个实例,并

Global site tag (gtag.js) - Google Analytics