Java单例模式之最优解分析【为何说是最优解】

代码如下

/**
 * 
 * @ClassName: SingletionStaticInner
 * @Description: TODO【单例模式之最优解】
 * @author shundong.wu
 * @date 2019年2月12日
 *  线程安全
 */
class SingletonStaticInner {
  private SingletonStaticInner() {

  }
  private static class SingletonInner {
    private static SingletonStaticInner singletonStaticInner = new SingletonStaticInner();
  }
  public static SingletonStaticInner getInstance() {
    try {
     Thread.sleep(1000);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
  return SingletonInner.singletonStaticInner;
  }
}

  

  

为何说是最优解呢? 

可以看到使用这种方式我们没有显式的进行任何同步操作,那他是如何保证线程安全呢?和饿汉模式一样,是靠JVM保证类的静态成员只能被加载一次的特点,这样就从JVM层面保证了只会有一个实例对象。那么问题来了,这种方式和饿汉模式又有什么区别呢?不也是立即加载么?实则不然,加载一个类时,其内部类不会同时被加载。一个类被加载,当且仅当其某个静态成员(静态域、构造器、静态方法等)被调用时发生。
——————————————————新年快乐——————————————

来吧 来吧 作者学粗才浅 尽管骚扰【邮箱 shundong106@icloud.com】

原文地址:https://www.cnblogs.com/shundong106/p/10364367.html