`

既线程安全又支持延迟加载的单例模式

    博客分类:
  • Java
阅读更多

 

 

// 当 JVM 加载 LazyLoadedSingleton 类时,由于该类没有 static 属性,所以加载完成后便即可返回。只有第一次调用
// getInstance()方法时,JVM 才会加载 LazyHolder 类,由于它包含一个 static 属性
// singletonInstatnce,所以会首先初始化这个变量,这样即实现了一个既线程安全又支持延迟加载的单例模式。
public class LazyLoadedSingleton {

	private LazyLoadedSingleton() {
	}

	private static class LazyHolder { // holds the singleton class
		private static final LazyLoadedSingleton singletonInstatnce = new LazyLoadedSingleton();
	}

	public static LazyLoadedSingleton getInstance() {
		return LazyHolder.singletonInstatnce;
	}
}

 

附最简单的单例例子:

public class Singleton{
   
    // static类型的类变量,只会赋值一次,保证线程安全
    // 或将赋值语句放到静态代码块中,即 static {...}
    private static Singleton instance = new Singleton();

    // other fields...
   
   // 构造方法为私有
    private Singleton(){

   }

   public static Singleton getInstance(){
       return instance;
  }

  // other methods
}
 

 

from:漫谈设计模式

分享到:
评论

相关推荐

    线程安全的单例模式

    懒汉式单例解决了饿汉式单例在未使用时即占用资源的问题,采用延迟加载机制,在第一次调用 `getSingleInstance()` 方法时才创建对象。然而,这种方式存在线程安全问题,当多个线程几乎同时调用 `getSingleInstance...

    浅议单例模式之线程安全(转)

    在多线程环境下,线程安全的单例模式尤为重要,因为如果不正确实现,可能会导致多个线程同时创建多个实例,违反了单例模式的基本原则。 在Java中,单例模式通常有以下几种实现方式: 1. 饿汉式(静态常量): ...

    设计模式之单例模式(结合工厂模式)

    DCL模式结合了两者优点,既保证了线程安全,又实现了延迟初始化。 工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建对象时,我们不会对客户端暴露创建逻辑,而是提供一个接口...

    C#单例模式详解 C#单例模式详解C#单例模式详解

    .NET框架提供了一个内置的Lazy类,可以方便地实现线程安全的延迟初始化单例。 ```csharp public class Singleton { private static readonly Lazy<Singleton> lazy = new Lazy(() => new Singleton()); ...

    java单例模式实例

    接下来是**双重检查锁定(Double-Check Locking)**,它结合了懒汉式和饿汉式的优点,既延迟初始化,又保证了线程安全。代码如下: ```java public class Singleton { private volatile static Singleton instance...

    线程安全单例

    综上所述,“静态内部类法”是一种既简单又高效的实现线程安全单例的方式。它不仅解决了多线程环境下的线程安全问题,还充分利用了 Java 的类加载机制实现了延迟加载,避免了不必要的内存消耗。对于那些需要频繁访问...

    7种单例模式

    利用类加载机制保证单例,既延迟初始化,又线程安全。 ```java public class Singleton { private Singleton() {} private static class SingletonInstance { private static final Singleton INSTANCE = new ...

    线程相关的单例模式

    在Java中,可以使用静态内部类的方式实现饿汉式单例,这样既能保证线程安全,又能避免无用的初始化。 3. **静态工厂方法**: 除了构造函数,还可以通过静态工厂方法来获取单例对象,这种方法可以提供更大的灵活性...

    设计模式——单例模式

    由于类加载机制保证了静态内部类的加载是线程安全的,所以这种方法既实现了延迟初始化,又保证了线程安全。 3. **枚举单例模式** ```java public enum Singleton { INSTANCE; } ``` 利用 Java 枚举的天然线程...

    设计模式——单例模式(懒汉模式)

    总的来说,单例模式是一种常见的设计模式,懒汉式单例模式则是其中一种实现策略,它的主要特点是延迟加载和线程安全。在选择单例模式实现时,开发者需要根据具体需求考虑性能、线程安全以及代码简洁性等因素。

    23钟设计模式之单例模式

    这种方式既实现了延迟加载,又避免了不必要的同步开销。 ```java public class Singleton { private volatile static Singleton instance = null; private Singleton() {} public static Singleton ...

    单例模式详解~~单例模式详解~~

    单例模式是一种设计模式,它的...总的来说,单例模式的实现需要考虑线程安全、性能、延迟初始化等多种因素。选择哪种实现方式取决于具体的应用场景和需求。理解并正确使用单例模式对于构建高效、稳定的系统至关重要。

    单例模式.ppt

    通过一个静态内部类持有单例实例,内部类的加载时机延迟到第一次调用`getInstance()`时,实现了懒加载,同时也保证了线程安全,因为类加载是线程安全的。这种方式避免了同步开销,但增加了类加载的复杂性。 5. **...

    设计模式单例模式

    这种方式在类加载时创建单例,但由于单例创建在静态内部类中,所以只有在调用`getInstance()`时才会加载`SingletonHolder`,实现了延迟初始化,同时也保证了线程安全。 3. **同步枷锁**(Synchronized):在多线程...

    设计模式之单例模式源码demo

    3. **双重检查锁定(DCL,Double Check Locking)单例模式**:结合了饿汉模式和懒汉模式的优点,既延迟了初始化,又保证了线程安全。在多线程环境下,只有在`instance`为`null`时才会进入同步块,避免了不必要的同步...

    几种单例模式demo

    利用Java类加载机制保证单例的唯一性,线程安全且延迟初始化。 ```java public class Singleton { private Singleton() {} private static class SingletonHolder { private static final Singleton INSTANCE ...

    单例模式详解

    - 优点:线程安全,延迟加载,避免不必要的同步。 - 缺点:实现相对复杂,需要注意JMM内存模型的影响。 5. **枚举单例**:利用枚举类型实现单例模式。 - 优点:简洁高效,线程安全,延迟加载。 - 缺点:使用...

    Java 单例模式.pptx

    - **特点**:结合了饿汉式和懒汉式的优点,既实现了延迟加载,又避免了多线程的同步问题,是一种比较推荐的方式。 #### 四、什么情况下使用单例模式? - **控制资源的使用**:通过线程同步来控制资源的并发访问,...

Global site tag (gtag.js) - Google Analytics