Double-Checked Locking看起来是非常完美的。但是很遗憾,根据Java的语言规范,上面的代码是不可靠的。
出现上述问题,
最重要的2个原因如下:
1, 编译器优化了程序指令, 以加快cpu处理速度.
2, 多核cpu动态调整指令顺序,
以加快并行运算能力.
问题出现的顺序:
1, 线程A, 发现对象未实例化, 准备开始实例化
2, 由于编译器优化了程序指令,
允许对象在构造函数未调用完前, 将共享变量的引用指向部分构造的对象, 虽然对象未完全实例化, 但已经不为null了.
3, 线程B,
发现部分构造的对象已不是null, 则直接返回了该对象.
不过, 一些著名的开源框架, 包括jive,lenya等也都在使用DCL模式,
且未见一些极端异常.
说明,
DCL失效问题的出现率还是比较低的.
接下来就是性能与稳定之间的选择了?
DCL的替代
Initialize-On-Demand
:
public
class Foo {
// 似有静态内部类, 只有当有引用时, 该类才会被装载
private static class
LazyFoo {
public static Foo foo = new
Foo();
}
public static Foo getInstance() {
return
LazyFoo.foo;
}
}
分享到:
相关推荐
用VB的Form直接生成DCL对话框程序极其调用的LSP文件 能自动对DCL对话框中的参数进行读取和赋值,并输出 使用步骤: 一、在VB中绘制好表单Form 注意:排列的时候尽量一行的Top坐标相同,这样能保证在同一行 二、将...
AutoCAD二次开发之DCL对话框自学教程
一个学习DCL对话框编程的好教程,适合于初级学者。
AutoLISP_DCL.AutoLISP_DCL.AutoLISP_DCL.AutoLISP_DCL.AutoLISP_DCL.AutoLISP_DCL.AutoLISP_DCL.AutoLISP_DCL.AutoLISP_DCL.
第3篇(第12~21章)为autolisp与dcl对话框整合应用,主要介绍了dcl的基础知识、dcl对象属性的定义速查、autolisp掌控dcl的关键技巧;还介绍了编辑框、按钮和文字、切换开关、单选按钮、列表框、下拉菜单、图像,图像...
dcl常用的一些设计方法 主要是大量的一些实例
`1111111111111111111111111111111111111111111
针对DCL专业课程提供期末报告的模板级样例
对于喜欢CAD二次开发的人来说,Lisp程序好写,DCL程序不好写,Lisp对CAD来说有Visual Lisp编辑器,而DCL似乎不好用,而且可视化程度不高。 此软件对二次开发的人来说,可以说是一大福音,它将DCL所有控件已经做到...
第3篇(第12~21章)为autolisp与dcl对话框整合应用,主要介绍了dcl的基础知识、dcl对象属性的定义速查、autolisp掌控dcl的关键技巧;还介绍了编辑框、按钮和文字、切换开关、单选按钮、列表框、下拉菜单、图像,图像...
Autolisp编程学习资料,铁道出版社,非常好的书籍。
DCL代码生成器 (DCG) ,主要是cad 的lisp窗口用,非常不错。。
dcl驱动程序PPT课件.pptx
在CAD环境下,利用LISP做对话框,方便数据输入。
Product Description and Identification (Part Number) ...DCL Series of multi-layer chip inductors for choke. 2) Product Identification (Part Number) DCL ※※※※ 〇 XXX □ ◎ ① ② ③ ④ ⑤ ⑥
分析了用AutoCAD内嵌的AutoLISP与DCL整合的开发过程,通过开发表面结构代号绘制工具的实例,说明了利用DCL和AutoLISP能够编写出人机交互强和功能强大的程序,从而对AutoCAD进行有效的二次开发,提高绘图效率,使AutoCAD...
实验三(2) SQL语言的DCL 一、实验目的 SQL的数据控制通过DCL(数据控制语言) 实现。DCL通过对数据库用户的授权和收权命令来实现有关数据的存取控制,以保证数据库的安全性。 本次实验了解DCL语言的GRANT和REVOKE...
第3篇(第12~21章)为autolisp与dcl对话框整合应用,主要介绍了dcl的基础知识、dcl对象属性的定义速查、autolisp掌控dcl的关键技巧;还介绍了编辑框、按钮和文字、切换开关、单选按钮、列表框、下拉菜单、图像,图像...
CAD程序设计魔法书,CAD二次开发,AutoLISP&dcl;基础,中国铁道出版社,