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练习代码库


  • 相关阅读:
    Django之form组件
    Http协议
    用户认证系统 django.contrib.auth模块
    自己关于Django的一些实践
    form标签
    jquery 遍历find()与children()的区别
    存储过程
    ASP.NET优化
    TRUNCATE与 DELETE
    视图的作用
  • 原文地址:https://www.cnblogs.com/javaadu/p/11742678.html
Copyright © 2011-2022 走看看