传统的最简单的方式
这种模式有一个缺点就是不能实现延迟加载,也就是当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单例模式的几种实现方法 #### 一、饿汉式单例类 饿汉式单例类是在类初始化时就已经完成了实例化的操作。这种实现方式简单且线程安全,因为实例化过程是在编译期间完成的,不会受到多线程的影响。 **代码...
接下来,我们将详细探讨几种常见的Singleton实现方式及其优缺点。 #### 二、经典实现方式:饿汉式 **代码示例:** ```java public class Singleton { // 私有构造函数,防止外部实例化 private Singleton() {} ...
本文将详细介绍如何在Java中创建线程安全的Singleton,包括几种常见的实现方式和最佳实践。 在Java中创建线程安全的Singleton模式是一项重要的任务,尤其是在多线程环境中。通过使用饿汉式、懒汉式与双重检查锁定、...
在"singleton.zip"压缩包中,我们可能会找到几种不同的Java单例实现方式的示例代码,包括饿汉式、懒汉式、反射实现以及内部类实现等。以下是对这些单例模式实现方式的详细解释: 1. **饿汉式(Eager Initialization...
### JAVA中单例模式的几种实现方式 #### 1. 线程非安全的基本实现方式 单例模式是设计模式中的一种常用形式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式可以通过多种方式来...
下面我们将深入探讨单例模式的几种实现方式。 ### 1. 饿汉式(静态常量) 饿汉式单例在类加载时就完成了初始化,因此是线程安全的。代码如下: ```java public class Singleton { private static final ...
下面将详细介绍单例模式的几种常见实现方式。 1. 饿汉式(静态常量) 饿汉式单例在类加载时就完成了初始化,因此线程安全。这种方式简单且效率高,但如果单例对象不被使用,会造成内存浪费。 ```java public class...
在Java中,单例模式的实现通常有以下几种方式: 1. 饿汉式(Static Inner Class Singleton): 这种方法在类加载时就完成了初始化,所以是线程安全的。它通过将单例类的构造函数设置为私有,并在内部类中创建一个...
以下是几种常见的单例模式实现方式: 1. **饿汉式(静态常量)**: 这是最简单的实现方式,它在类加载时就完成了初始化,因此是线程安全的。 ```java public class Singleton { private static final Singleton...
下面我们将详细介绍Singleton模式的几种常见实现方式: 1. 饿汉式(静态常量): 在类加载时就完成了初始化,因此这种方法是线程安全的。但是,由于类加载较早,即使尚未使用Singleton,也会创建实例,造成内存...
以下是对这六种常见单例模式实现方式的详细解释: 1. **饿汉式(静态常量)** 这是最简单的单例实现,它在类加载时就创建了实例,线程安全。 ```java public class Singleton { private static final Singleton...
### Java之几种常见的简单设计模式 #### 设计模式概述 设计模式是一套被广泛采纳的、经过实践检验的代码设计经验总结。它们提供了解决在软件开发过程中经常遇到的复杂问题的标准方法。采用设计模式的目的在于提高...
在Java中实现单例模式主要有以下几种方式: 1. 饿汉式(静态常量) 这是最简单的单例实现方式,通过静态常量在类加载时就完成初始化,确保线程安全。 ```java public class Singleton { private static final ...
除了上述提到的饿汉式和懒汉式单例模式外,还有其他几种实现方式,如枚举单例、内部类单例等,每种方式都有其适用场景和优劣。 #### 结论 单例模式作为软件工程中的一种基本设计模式,其核心在于控制类的实例化...
以下是几种常见的Java单例模式实现方式: 1. **饿汉式(静态常量)**: 这种方式在类加载时即初始化实例,线程安全,但可能导致不必要的内存占用。 ```java public class Singleton1 { private Singleton1() {} ...
以下是对Java中实现单例模式的几种常见方法的详细说明: 1. 饿汉式(静态常量): 这种方法在类加载时就完成了实例化,避免了多线程同步问题,但如果实例化的对象长时间未被使用,会浪费内存资源。 ```java public...
Singleton模式的实现主要有以下几种: 1. **饿汉式(Eager Initialization)**:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快,且线程安全。 ```java public class Singleton { private ...
### 最简单的设计模式...通过私有构造函数、静态成员变量和静态工厂方法的组合使用,可以轻松地在Java和C++等语言中实现Singleton模式。同时,在多线程环境下,需要特别注意线程安全问题,采取相应的措施确保单例性。
单例模式有两种常见的实现方式:饿汉式和懒汉式。 - 饿汉式(Eager Initialization):在类加载时就创建了单例对象,这种方式简单且线程安全,但可能会造成资源浪费,因为即使单例未被使用,也会在类加载时创建。 `...