并行模式之单例模式

单例模式是最常用的模式之一,它是一种对象的创建模式,用于产生一个对象的具体实例,确保系统中一个类只产生一个实例。其优点是:

对于频繁使用的对象,可以省略new花费的时间,对于重量级对象来说非常有用。

由于new的次数减少,对系统内存的使用频率也会降低,将减轻GC压力并缩短GC停顿时间。

创建单例对象

上述方式的缺点是Singleton实例在何时被创建不受控制,静态成员instance会在类第一次初始化时被创建,此时并不一定是getInstance()方法第一次被调用的时候。

创建单例对象改进版

在上述代码中增加一个表示状态的静态成员STATUS,在任何地方引用这个STATUS都会导致instance实例被创建(instance实例只会被创建一次);

一种支持延时加载策略,并且只会在instance首次使用时创建对象的方式:

懒加载的方式创建

上述方式的核心思想:开始我们并不需要实例化instance,当getInstance()被第一次调用时,创建单例对象。为了防止对象被多次创建,需要使用synchronized同步。好处是充分利用了延迟加载,只在追男仔需要时创建。缺点是并发下加锁,在竞争激烈的情况下会产生一定性能影响。

更优的方案

上述方式同时拥有了前两种方式的优点,首先getInstance()中没有加锁,在并发下性能很高,其次getInstance()被第一次调用时,StaticSingleton的实例才会创建,其使用了内部类和类的初始化方式。内部类SingletonHolder被声明为private,不可以在外部进行访问并初始化它,只能在getInstance()内部对SingletonHolder类进行初始化,利用JVM的类初始化机制创建单例。


--参考文献《实战Java高并发程序设计》

你可能感兴趣的:(并行模式之单例模式)