美文网首页
Java-延迟加载的单例模式

Java-延迟加载的单例模式

作者: 液晶半导体 | 来源:发表于2017-01-04 20:55 被阅读0次

所有java的版本里,这个方法都能达到安全高效的实现高并发的延迟初始化。

Code:

public class Something {

    private Something() {}

    private static class LazyHolder {

        private static final Something INSTANCE = new Something();

    }

    public static Something getInstance() {

        return LazyHolder.INSTANCE;

    }

}

这种实现依赖于在JVM中初始化阶段的特性,这在java 语言说明里有交代。当一个类被JVM加载,这个类就会历经初始化的过程。既然这个类没有其他静态的变量需要初始化,那么初始化过程就会顺利完成。而定义在类里面的静态类LazyHolder直到JVM确定LazyHolder一定会被执行时才会去初始化。当静态方法getInstance调用时,静态类LazyHolder才会被执行,当这件事第一次发生时,JVM就会去加载并初始化LazyHolder。

LazyHolder 的初始化导致了静态变量INSTANCE因为外部类(就是指LazyHolder)执行私有的构造器而被初始化。由于类的初始化过程是串行的(由java语言说明保障),就无需并行同步操作了。

并且,因为初始化阶段在串行操作里写入静态变量INSTANCE,所有接下来的并行调用getInstance方法会正确返回相同的INSTANCE,而不需要额外的同步开销。

官方软文

相关文章

  • 单例模式的实现方式

    单例模式的实现 单例模式的实现一般来说有2种方式:懒汉式(延迟加载)、饿汉式(非延迟加载)。 1. 饿汉式(非延迟...

  • Java线程安全的单例模式

    简单的单例模式(饿汉模式) 程序代码加载时,单例即初始化,加重系统负载.未实现懒加载 懒加载的单例模式 双锁延迟加...

  • Java-延迟加载的单例模式

    在所有java的版本里,这个方法都能达到安全、高效的实现高并发的延迟初始化。 Code: public class...

  • 单例模式

    单例(Singleton)模式 非延迟加载的模式就不介绍了 说一下多线程下的延迟加载 简单加锁 就是在getIns...

  • 多线程:6单例模式和多线程

    单例模式和多线程 1.立即加载 2.延迟加载 2.1 延迟加载不同步在多线程环境下的问题 2.2延迟加载的解决方案...

  • 单例模式

    单例模式保证全局唯一性,得考虑线程安全性延迟加载? 饿汉模式 线程安全的,但是不支持延迟加载(有问题早发现)① /...

  • 设计模式

    单例模式 饿汉式:无法延迟加载 懒汉模式:线程安全 synchronized DCL:会被指令重排序 volila...

  • 设计模式系列-单例模式的N种实现与总结

    通常Java实现单例模式有很多种方式,大致可分为懒汉模式和饿汉模式,其主要区别是实例延迟加载的问题,当然单例模式往...

  • 设计模式--单例模式

    单例模式 懒汉式 顾名思义,lazy loading(延迟加载),在需要的时候创建单例对象,而不是随着软件系统的运...

  • 设计模式在Netty中的应用

    单例模式 全局唯一 + 线程安全 + 延迟加载 策略模式 算法家族 + 动态选择 + 相互替换 装饰器模式 同宗同...

网友评论

      本文标题:Java-延迟加载的单例模式

      本文链接:https://www.haomeiwen.com/subject/phlavttx.html