1、定义
《Head
First
-Design Pattern》
一书中定义其作用如下:
The Singleton Pattern
ensures a class has only one instance, and provides a global point of access it.
(确保每个类只有一个实例,并提供它的全局访问点)
2、两种形式
(1)使用"急切"创建实例
public class SingletonPatternA {
private static SingletonPatternA instance = new SingletonPatternA();
private SingletonPatternA() {
};
public static SingletonPatternA getInstance() {
return instance;
}
}
说明:
*在静态初始化器中创建单件,保证线程安全。
* 构造方法为私有
(2)使用延迟实例化
public class SingletonPatternB {
private static SingletonPatternB uniqueInstance;
private SingletonPatternB() {
}
public static synchronized SingletonPatternB getInstance() {
if (uniqueInstance == null)
uniqueInstance = new SingletonPatternB();
return uniqueInstance;
}
}
说明:
*利用静态变量
*构造方法为私有
*getInstance()存在着线程安全问题,所以要增加synchronized关键字。
3、由于synchronized getInstance() 同步一个方法可能使程序执行效率下降100倍,利用“double-checked locking
”来减少getInstance()方法必须是sychronized的改进。
public class SingletonPatternC {
private static volatile SingletonPatternC singleton;
private SingletonPatternC() {
}
public static SingletonPatternC getInstance() {
if (singleton == null) {
synchronized (SingletonPatternC.class) {
if (singleton == null) {
singleton = new SingletonPatternC();
}
}
}
return singleton;
}
}
注意:在1.4及更早版本的java中,许多JVM对volatile关键字的实现会导致"双重检查加锁"的失效,如果使用1.4及以下java版本请不要使用volatile关键字。
分享到:
相关推荐
本项目"adv-java-factory-singleton"显然关注的是Java设计模式中的两个关键概念:工厂模式(Factory Pattern)和单例模式(Singleton Pattern)。这两种模式是软件设计模式中的基础,对于理解和构建可扩展、易于维护...
单例模式(Singleton Pattern)是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如控制资源的唯一性、全局配置对象或者缓存服务等。本篇文章将深入探讨...
- 可以通过双重检查锁定(Double-Checked Locking)优化性能。 **线程安全问题及解决方案** - **问题**:在多线程环境中,若不采取措施,则可能会导致单例模式失效,即生成多个实例。 - **解决方案**: - 使用`...
在C++中实现单例,需要注意线程安全问题,可能会使用到静态成员变量、双重检查锁定(Double-Checked Locking)以及C++11的std::call_once和std::once_flag等工具来确保正确性。 第5章可能会讲解“工厂模式”...
Singleton模式是一种常用的软件设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点。这种模式在系统中经常被用于控制对共享资源(如数据库连接、日志对象等)的访问。正确地实现Singleton模式对于提高代码...
在Java中,可以通过静态内部类、枚举或双检锁(Double-Checked Locking)等方式实现单例。 其次,工厂模式(Factory Pattern)是创建型设计模式,它提供了一种创建对象的最佳方式,通过一个公共接口来创建特定类型...
在Java中,通常使用双重检查锁定(Double-Checked Locking)或者静态内部类的方式来实现。 4. 建造者模式(Builder Pattern):建造者模式将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。...
单例模式(Singleton Pattern)是设计模式中的一种,其主要意图是限制类的实例化次数,确保一个类只有一个实例,并提供一个全局访问点。这样的设计可以避免过多的实例化导致的资源浪费,特别是在需要全局共享资源...
在Java中,通常通过双重检查锁定(Double-Checked Locking)或静态内部类方式实现单例。 接着是工厂模式(Factory Pattern),它是一种创建型设计模式,提供了创建对象的接口,但允许子类决定实例化哪个类。工厂...
单例模式需要注意线程安全问题,如双重检查锁定(Double-Checked Locking)等实现方式。 - **抽象工厂(Abstract Factory)**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 - **建造者...
在Java中,通过私有构造器和静态方法来实现,线程安全的单例可以使用枚举或双重检查锁定(double-checked locking)来创建。例如: ```java public enum Singleton { INSTANCE; } // 或者使用双重检查锁定 public...
设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. ...
单件模式(Singleton Pattern)是软件设计模式中最为常见的一种,它的主要目标是确保某个类只有一个实例,并提供一个全局访问点。单件模式在很多情况下都非常有用,比如管理共享资源(如内存、文件句柄等)、作为...
为了确保线程安全,可以使用懒加载技术或双重检查锁定(Double-Checked Locking)机制。 #### 2. 抽象工厂模式(Abstract Factory) 抽象工厂模式提供了一个接口,用于创建一系列相关的或相互依赖的对象,而无需...
在Java中,可以使用静态内部类、枚举或者双检锁(Double-Checked Locking)等方式实现单例,以保证线程安全并避免过早初始化。 3. 构造器模式(Builder Pattern): 构建者模式是一种创建型设计模式,它将复杂对象...
在Java中,通常使用双重检查锁定(Double-Checked Locking)或者静态内部类的方式来实现线程安全的单例。 3. 建造者模式(Builder Pattern): 建造者模式是一种创建型设计模式,它将复杂对象的构建与其表示分离,...
3. **双重检查锁定(DCL,Double Checked Locking)** - **概念**:结合了懒汉式和饿汉式的优点,既保证了线程安全又提高了效率。 - **代码示例**: ```java public class Singleton { private volatile static...
Java8引入了新的特性,如lambda表达式和方法引用,这些可以帮助我们更简洁地实现单例,例如使用`Double Checked Locking`(双重检查锁定)或者`Enum Singleton`(枚举单例)。 再次,构造器模式(Builder Pattern)...
为了保证线程安全,可以使用双重检查锁定模式(Double-Checked Locking Pattern),确保只有一个实例被创建。但是这要求必须使用关键字volatile修饰静态实例变量,以防止指令重排序导致的问题。单例模式1和单例模式2...
此外,还要注意线程安全问题,例如双检锁定(Double-Checked Locking)或枚举单例等实现方式。 其次,工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。工厂模式定义了一个用于...