代码如下

/**
 *
 * @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】

最新文章

  1. Java学习笔记14---使用标志位控制循环
  2. 你必须知道的指针基础-1.预备篇:搭建GCC开发环境
  3. ARM指令教程
  4. 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)
  5. php json_encode中文unicode问题
  6. 使用Hibernate命名查询
  7. 如何用JAVA生成注册序列号
  8. [Flux] 3. Actions
  9. Windows系统安装MySQL
  10. EhCache 在集群环境中使用缓存系统
  11. Django用普通user对象登录的必须准备步骤
  12. DPDK - gsg文档(介绍与编译)
  13. 小心错误使用EasyUI 让网站性能减半
  14. js字符串方法汇总
  15. echarts横向柱状图如果想打开网址
  16. MySQL-死锁查询
  17. Remote 桌面的win2003 servre端设定
  18. 九度 1464:Hello World for U
  19. Java并发编程原理与实战四:线程如何中断
  20. maven指定本地的文件包

热门文章

  1. android activity的生命周期和启动模式
  2. vue echarts map的使用,页面多图动态自适应
  3. Testlink插件工具
  4. 基本服务器的AAA实验(Cisco PT)
  5. Login Verification CodeForces - 928A (实现)
  6. Linux程序前台后台切换
  7. linux环境下vim创建java文件,并编译运行
  8. 深入Redis持久化
  9. XXXX is not in the sudoers file. This incident will be reported解决方法
  10. 基于zookeeper实现分布式锁