zoukankan      html  css  js  c++  java
  • 从学习“单例模式”学到的Java知识:双重检查锁和延迟初始化

            一切真是有缘,上午刚刚看完单例模式,还在为其中的代码块同步而兴奋,下午就遇见这篇文章:双重检查锁定与延迟初始化。我一看,文章开头语出惊人,说这是一种错误的优化,我说,难道上午学的东西下午就过时了吗?仔细一看,发现了volatile的用处百度百科:violiate,而这正是上午我阅读时不得其解的地方,为什么要用这个呢,在《Head First设计模式》中只是简单说为了让多线程正确工作。而这篇文章,恰恰解决了我的这个疑惑,也就是uniqueInstance = new Instance()其实是分三步走的,编译器优化会对其进行重排列从而导致错误,所以需要volatile关键字禁止这种重排列。

            我还通过这篇文章学了另一种单例模式的实现方法:

    public class InstanceFactory {
        private static class InstanceHolder {
            public static Instance instance = new Instance();
        }
    
        public static Instance getInstance() {
            return InstanceHolder.instance ;  //这里将导致InstanceHolder类被初始化
        }
    }

    具体的讲解十分精彩,请移步该文章共同学习。最后,推销一下我维护的github项目:HeadFirst练习代码库


  • 相关阅读:
    博客样式备份
    2018年终总结
    技术博客的太监
    LeetCode 日常填坑
    互联网之父
    TotoiseSVN的使用方法
    常用CMD命令
    量化策略
    浏览器加载js的阻塞与非阻塞
    Vue核心之数据劫持
  • 原文地址:https://www.cnblogs.com/javaadu/p/11742678.html
Copyright © 2011-2022 走看看