在Java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化 。这称为延迟初始化或懒加载 看一个不安全的延迟初始化: A线程执行1后,发现对象instance为null,准备对其new,而B线程却先new了,这造成了错误 我们可以利用同步锁,保证正确: 但是对 ...
分类:
编程语言 时间:
2018-06-19 16:27:06
阅读次数:
128
单例模式的实现一:懒汉式 单例模式的实现一:懒汉式 ...
分类:
其他好文 时间:
2018-06-08 19:26:02
阅读次数:
119
DCL,即Double Check Lock,中卫双重检查锁定。其实DCL很多人在单例模式中用过,LZ面试人的时候也要他们写过,但是有很多人都会写错。他们为什么会写错呢?其错误根源在哪里?有什么解决方案?下面就随LZ一起来分析 问题分析 我们先看单例模式里面的懒汉式: 我们都知道这种写法是错误的,因 ...
分类:
编程语言 时间:
2018-04-12 13:42:49
阅读次数:
172
首先,这个问题是从《阿里巴巴Java开发手册》的1.6.12(P31)上面看到的,里面有这样一句话,并列出一种反例代码(以下为仿写,并非与书上一致): 在并发场景下,通过双重检查锁(double-checked locking)实现延迟初始化的优化问题隐患,推荐解决方案中较为简单的一种(适用于JDK ...
分类:
其他好文 时间:
2018-03-04 16:33:32
阅读次数:
373
有关“双重检查锁定失效”的说明 原文地址 译者:丁一 双重检查锁定(以下称为DCL)已被广泛当做多线程环境下延迟初始化的一种高效手段。 遗憾的是,在Java中,如果没有额外的同步,它并不可靠。在其它语言中,如c++,实现DCL,需要依赖于处理器的内存模型、编译器实行的重排序以及编译器与同步库之间的交 ...
分类:
其他好文 时间:
2018-01-09 20:12:20
阅读次数:
249
一、单例模式概述 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。 二、单例模式的五种写法 1.饿汉式 优点:线程安全,效率高 缺点:无法延时加载 2. 懒汉式 优点:线程安全,延时加载 缺点:效率较低 (1)非线程安全 (2)线程安全 3.双重检查锁 注意:由于编译器优化和JVM底层内 ...
分类:
其他好文 时间:
2017-12-23 18:58:09
阅读次数:
211
另一鲜为人知的单例写法-ThreadLocal 源代码范例 当我阅读FocusFinder和Choreographer的时候,我发现这两类的单例实现和我们寻经常使用双重检查锁非常不一样。而是用来一个ThreadLocal。这个也能够实现单例啊,那这个与双重检查锁实现的单例有什么差别呢? 1.Focu ...
分类:
其他好文 时间:
2017-08-15 16:02:15
阅读次数:
206
http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html http://freish.iteye.com/blog/1008304 双重检查锁定在延迟初始化的单例模式中见得比较多(单例模式实现方式很多,这里为说明双重 ...
分类:
其他好文 时间:
2017-08-12 12:41:16
阅读次数:
164
完美的单例 双重检查锁(DCL) 用处:延迟初始化,降低同步开销。double checked locking 注意:single必须声明为volatile,且支持JDK1.5及以上版本。 对象初始化需要三个步骤: memory=allocate(); //1.分配内存空间 ctorInstance ...
分类:
其他好文 时间:
2017-07-04 18:11:48
阅读次数:
217