利用JVM类初始化实现线程安全的单例生成

2018-09-28  本文已影响0人  守住阳光

        实现线程安全的单例模式有多种方案,最常见的是使用 synchronized 关键字。但是这种方案在线程竞争激烈时开销比较大。今天介绍利用JVM类初始化的方式来实现单例模式。

        jvm在进行类初始化时,为了保证线程安全,会提供在类初始化锁,保证该类只会被初始化一次。我们可以利用此特性来实现线程安全的单例模式。话不多说,亮出代码:

public class PoolMannager{

        private static class createPool{

               private static MyPoolImpl poolImpl = new MyPoolImpl ();

        }

        public static MyPoolImpl  getInstance(){

                return createPool.poolImpl ;

        }

}

代码实现逻辑:

        1、定义一个内部类,其中一个属性是需要创建的类的实例,注意使用static修饰;

        2、定义返回的单例的方法,方法体中通过 内部类.单例对象属性 的方式返回单例对象。

        内部类.单例对象属性,对静态属性的访问会触发对内部类的初始化,而类的初始化是线程安全的,所以利用此机制能保证线程安全地返回单例对象。

上一篇下一篇

猜你喜欢

热点阅读