《java与设计模式》中谈到了这样一种情况:在Singleton模式的使用中,存在一种错误的技巧,即“双重检查成例”,代码如下所示:
//Broken multithread version
public class ResourceObject {
private static ResourceObject obj=null;
//unnormal private constructor
private ResourceObject()
{}
//double-check locking method
public static ResourceObject getResourceObject()
{
if(obj == null)//first check position
{
//more than one thread will get here
synchronized(ResourceObject.class)
{
//only one thread every single time here
if(obj == null)//second check here
{
obj=new ResourceObject();
}
}
}
return obj;
}
//other functions and members
}
两次检查看似可以省去不必要的同步开销,但是对于java编译器来说这种技巧并不成立。原因在于,java编译器会优化生成的中间代码,导致 ResourceObject类的初始化与变量obj的赋值之间的顺序变得不可预料。在单线程的情况下,这不会导致程序错误,而且也没有同步问题。但是在 多线程的情况下,在前一个线程执行完赋值语句,然后进行剩下的初始化时,后一个线程就会获得未初始化完的对象实例,此时调用ResourceObject 类的方法,就有可能使用初始化过程中未初始化完的类成员,造成程序崩溃。鉴于这一切行为都是无法预测的,双重检查是不建议在java中使用的。
分享到:
相关推荐
15.9 附录:双重检查成例的研究.....243 15.10 给读者的一点建议...................247 第16 章 专题:单例模式与MX 记录 ....... 249 16.1 问题与解决方案.........................249 16.2 目录服务与MX 记录......
在这个实例中,遗传算法被用来优化BP神经网络的权重和阈值,以提升其预测或分类的准确性。 BP(Backpropagation)神经网络是一种广泛使用的多层前馈神经网络,通过反向传播误差来调整权重。然而,BP网络的训练过程...
7. **法廷成例**:秦朝的法廷成例称为“廷行事”,它相当于现代的判例法,对于同类案件有一定的指导作用。 8. **官吏考核**:秦朝对官吏的考核内容是“五善五失”,即五个优点和五个过失,以此评估官员的工作表现。...
本书重点介绍与这些问题领域对应的16个模式和一个成例。同时辅以大量模式示例和已知应用,帮助读者理论联系实际。本书四位作者均为国际公认的软件开发专家,在模式、面向对象架构、面向对象的分布式系统、设计模式等...
律例中的“例”不仅仅是皇帝的诏令,也包括了批准的法令和成例,随着时间推移,例的地位逐渐超越了正律,形成了每五年小修、十年大修的编例制度。乾隆时期,律例的重要性更加凸显,明确规定在有例的情况下不再使用律...
第2 ~ 4 章讲解模式编目,分别阐述了架构模式、设计模式和成例;第5 章揭示如何将模式组织成模式系统及其重要性;第6 章探讨将模式融入软件架构的方法;第7 章概述模式的历史、相关著作及模式界;第8 章展望模式...
第2 ~ 4 章讲解模式编目,分别阐述了架构模式、设计模式和成例;第5 章揭示如何将模式组织成模式系统及其重要性;第6 章探讨将模式融入软件架构的方法;第7 章概述模式的历史、相关著作及模式界;第8 章展望模式...
用于Verilog代码中模块的例化,可直接先将module部分转换成例化后的语句,并且实现代码对齐。使用MATALB2019a的APPdesigner编写
“例”不仅是皇帝的诏令,也包含经皇帝批准的法令和成例。自雍正五年起,律文被确立为不可轻易更改的成法,通过编例进行适时调整。乾隆时期确立了“条例五年一小修,十年一大修”的制度,条例逐渐超越正律,成为法律...
2. **阻碍与限制**:“格”有时候成为我们前进道路上的障碍,如“格于成例”表示被既定的规矩束缚。在快速发展的现代社会,勇于挑战成规,敢于破格,往往能推动社会的进步。这要求我们在面对挑战时,要有打破陈规的...
- 宋元明清:法典与案例相结合,案件成例发展,司法与行政逐渐结合。 2. 宋元明清时期的“商业革命” - 特征:商业活动的时间和空间限制被打破,草市完善,纸币使用,大城市出现,海外贸易繁荣。 - 明清时期:...
3. 有例可援:意味着有先例或成例可以参考,用以支持或辩解某一行为或决定。 4. 鸿鹄之志:出自《史记·陈涉世家》,比喻高远的志向,就像天鹅翱翔天际一样。 5. 垂手:两手自然下垂,常用来形容恭敬或无所作为的...
解答的实话,要先设法消去其中的一个未知数,将方程组简化成例 1 那样的不定方程。5x + 7y + 3z = 25 3x - y - 6z = 2 由①×2 + ②,得 13x + 13y = 52 X + y = 4 把③式变形,得 y = 4 - x。因为 x、y、z 都是正...