`
huangyuanmu
  • 浏览: 289934 次
  • 性别: Icon_minigender_1
  • 来自: 龙城
社区版块
存档分类
最新评论

java中singleton的几种实现方式

阅读更多

传统的最简单的方式

这种模式有一个缺点就是不能实现延迟加载,也就是当Singleton类被初始化时,INSTANCE立刻就被创建。比如这个类包含其它static方法,而你正好又调用了static方法,那么

INSTANCE就被创建,尽管你这个时候并不想使用INSTANCE。当你不需要延迟加载或者该类里没有其它static方法的时候,可以使用这种方式来简单的实现单例模式。

public class Singleton {
   private static final Singleton INSTANCE = new Singleton();
 
   // 私有构造器,保证了只能在本类内部进行实例化
   private Singleton() {}
 
   public static Singleton getInstance() {
      return INSTANCE;
   }
}

 

 

对传统方式的改进

这种模式很好的实现了延迟加载,而且适用于任何java版本和java虚拟机,可以认为是java语言里单例模式的标准实现。

public class Singleton {

   // 私有构造器,保证了只能在本类内部进行实例化   
    private Singleton() {}
 
   /**
    * 当第一次执行Singleton.getInstance() 或者第一次访问SingletonHolder.INSTANCE时,SingletonHolder
    * 被加载 , 在此之前,INSTANCE不会被初始化。
    */
   private static class SingletonHolder {
     private static final Singleton INSTANCE = new Singleton();
   }
 
   public static Singleton getInstance() {
     return SingletonHolder.INSTANCE;
   }
}

 

使用同步关键字的传统方式(适用于java5.0以上)

public class Singleton {
   private volatile static Singleton singleton;//volatile关键字是必须的,用以确保多线程共享实例
 
   private Singleton(){}
 
   public static Singleton getSingleton(){
     if(singleton==null) {
       synchronized(Singleton.class){
          if(singleton==null)
          singleton= new Singleton();
       }
    }
   return singleton;
  }
}

 

使用同步关键字的双重加锁方式(java1.4及以下版本的实现)

public class Singleton {
   private static Singleton singleton;
   private Singleton(){}
 
   public  static synchronized Singleton getSingleton(){
     if(singleton==null) {
       synchronized(Singleton.class){
          if(singleton==null)
          singleton= new Singleton();
       }
    }
   return singleton;
  }
}

 

个人推荐使用第二种方式。

分享到:
评论

相关推荐

    JAVA单例模式的几种实现方法

    ### JAVA单例模式的几种实现方法 #### 一、饿汉式单例类 饿汉式单例类是在类初始化时就已经完成了实例化的操作。这种实现方式简单且线程安全,因为实例化过程是在编译期间完成的,不会受到多线程的影响。 **代码...

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

    接下来,我们将详细探讨几种常见的Singleton实现方式及其优缺点。 #### 二、经典实现方式:饿汉式 **代码示例:** ```java public class Singleton { // 私有构造函数,防止外部实例化 private Singleton() {} ...

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

    本文将详细介绍如何在Java中创建线程安全的Singleton,包括几种常见的实现方式和最佳实践。 在Java中创建线程安全的Singleton模式是一项重要的任务,尤其是在多线程环境中。通过使用饿汉式、懒汉式与双重检查锁定、...

    singleton.zip单例的几种实现demo,

    在"singleton.zip"压缩包中,我们可能会找到几种不同的Java单例实现方式的示例代码,包括饿汉式、懒汉式、反射实现以及内部类实现等。以下是对这些单例模式实现方式的详细解释: 1. **饿汉式(Eager Initialization...

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

    ### JAVA中单例模式的几种实现方式 #### 1. 线程非安全的基本实现方式 单例模式是设计模式中的一种常用形式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式可以通过多种方式来...

    单例模式的几种实现方式demo

    下面我们将深入探讨单例模式的几种实现方式。 ### 1. 饿汉式(静态常量) 饿汉式单例在类加载时就完成了初始化,因此是线程安全的。代码如下: ```java public class Singleton { private static final ...

    单例模式的几种实现方式

    下面将详细介绍单例模式的几种常见实现方式。 1. 饿汉式(静态常量) 饿汉式单例在类加载时就完成了初始化,因此线程安全。这种方式简单且效率高,但如果单例对象不被使用,会造成内存浪费。 ```java public class...

    singleton_单例模式_java_设计模式_

    在Java中,单例模式的实现通常有以下几种方式: 1. 饿汉式(Static Inner Class Singleton): 这种方法在类加载时就完成了初始化,所以是线程安全的。它通过将单例类的构造函数设置为私有,并在内部类中创建一个...

    单例模式各种实现方式

    以下是几种常见的单例模式实现方式: 1. **饿汉式(静态常量)**: 这是最简单的实现方式,它在类加载时就完成了初始化,因此是线程安全的。 ```java public class Singleton { private static final Singleton...

    (创建型模式)Singleton模式

    下面我们将详细介绍Singleton模式的几种常见实现方式: 1. 饿汉式(静态常量): 在类加载时就完成了初始化,因此这种方法是线程安全的。但是,由于类加载较早,即使尚未使用Singleton,也会创建实例,造成内存...

    java-单例模式几种写法

    以下是对这六种常见单例模式实现方式的详细解释: 1. **饿汉式(静态常量)** 这是最简单的单例实现,它在类加载时就创建了实例,线程安全。 ```java public class Singleton { private static final Singleton...

    java之 ------ 几种常见的简单设计模式

    ### Java之几种常见的简单设计模式 #### 设计模式概述 设计模式是一套被广泛采纳的、经过实践检验的代码设计经验总结。它们提供了解决在软件开发过程中经常遇到的复杂问题的标准方法。采用设计模式的目的在于提高...

    17-SingleTon.rar

    在Java中实现单例模式主要有以下几种方式: 1. 饿汉式(静态常量) 这是最简单的单例实现方式,通过静态常量在类加载时就完成初始化,确保线程安全。 ```java public class Singleton { private static final ...

    Singleton pattern单例模式应用

    除了上述提到的饿汉式和懒汉式单例模式外,还有其他几种实现方式,如枚举单例、内部类单例等,每种方式都有其适用场景和优劣。 #### 结论 单例模式作为软件工程中的一种基本设计模式,其核心在于控制类的实例化...

    详解JAVA单例模式及多种实现.doc

    以下是几种常见的Java单例模式实现方式: 1. **饿汉式(静态常量)**: 这种方式在类加载时即初始化实例,线程安全,但可能导致不必要的内存占用。 ```java public class Singleton1 { private Singleton1() {} ...

    Java单例模式实现的几种方式

    以下是对Java中实现单例模式的几种常见方法的详细说明: 1. 饿汉式(静态常量): 这种方法在类加载时就完成了实例化,避免了多线程同步问题,但如果实例化的对象长时间未被使用,会浪费内存资源。 ```java public...

    Singleton模式

    Singleton模式的实现主要有以下几种: 1. **饿汉式(Eager Initialization)**:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快,且线程安全。 ```java public class Singleton { private ...

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

    ### 最简单的设计模式...通过私有构造函数、静态成员变量和静态工厂方法的组合使用,可以轻松地在Java和C++等语言中实现Singleton模式。同时,在多线程环境下,需要特别注意线程安全问题,采取相应的措施确保单例性。

    Java面向对象(高级)- 单例(Singleton)设计模式

    单例模式有两种常见的实现方式:饿汉式和懒汉式。 - 饿汉式(Eager Initialization):在类加载时就创建了单例对象,这种方式简单且线程安全,但可能会造成资源浪费,因为即使单例未被使用,也会在类加载时创建。 `...

Global site tag (gtag.js) - Google Analytics