Dojo
最新
最佳
搜索
订阅
解道Jdon
架构设计
领域驱动
DDD介绍
DDD专辑
战略建模
领域语言UL
领域事件
商业分析
工作流BPM
规则引擎
架构师观点
数据工程
产品经理
认知谬论
系统思维
微服务
微服务介绍
微服务专辑
模块化设计
SOA
API设计
clean架构
SpringBoot
分布式事务
事件溯源
Kafka消息
Kubernetes
DevOps
编程设计
GoF设计模式
模式专辑
面向对象
函数式编程
编程语言比较
编程工具比较
形式逻辑
前端编程
Reactive编程
Jdon框架
Rust语言
人工智能
Web3
模因梗
幽默梗
程序员职场
职业规划
面试技巧
道德经
认知偏差
Java入门
更多话题
关于单态模式的问题
02-12-26
fuzhou
在阎宏的java与模式中,他讲到双重成例检查在大多数情况下是不能在java环境下成立的,不是很明白,看斑竹的代码中好象就用了这个东西
那么这个到底能不能行那?
hxz
2002-12-26 15:51
为什么banq不回这帖子?是不是提到阎宏博士,心里狠狠的!
开玩笑:)
banq
2002-12-26 15:56
:) 不过,看了这位博士的书的目录,除了GOF的23个
设计模式
我看得懂外,其它我真的掉入云里雾里。
可能我用了"双重成例检查",但是我不知道它叫"双重成例检查",你能告诉我吗?
一般在国外市面上公认三套设计模式的名称 GOF98、Grand99 还有一个名字忘记了,是关于并行模式的。
我们自己都可以发明自己命名设计模式,但是能否得到公认,另当别认。
fuzhou
2002-12-26 15:58
我觉得应该是高手惺惺相吸才对吧,都到了这种境界了,想不出有什么理由好狠狠的????
fuzhou
2002-12-26 15:59
就是这个
if (factory == null) {
synchronized(initLock) {
if (factory == null) {
try {
Class c = Class.forName(className);
factory= (AuthorizationIF)c.newInstance();
}catch (Exception e) {
throw new Exception("Exception loading AuthorizationIF
class: " +className + e);
}
}
}
}
hxz
2002-12-26 16:04
事实上提到过啊!
不就是double-checked locking
fuzhou
2002-12-26 16:09
对哦对哦,阎宏同志说类的初始化和变量的初始化的顺序不可预料,因此
如果在别的地方引用到该实例后后果不可预料,还是对方法同步最安全。
说真的,我也搞不清楚double check lock到底有多大的好处,是对方法的同步开销太大吗???
hxz
2002-12-26 16:14
上面第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。
注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。关于lazy initialization的Singleton有很多涉及double-checked locking (DCL)的讨论,有兴趣者进一步研究。
一般认为第一种形式要更加安全些。
引用至:首页的工厂方法
为什么第一安全些而第二种被jive采用?
是不是第二种在不设及ejb和分布式多jvm时也是安全的?
banq
2002-12-26 17:35
DCL是有一些好处,主要是不必每次重新生成对象。网上有很多关于DCL的讨论,这里面学问很大,钻进去,发现有一堆理论,我是头疼了。
corejava
2002-12-26 20:47
晕,一连看了好几天,云里雾里,好几十种模式,现在的工程用的却不多,也就那么几种,不过还是为中国的文化底蕴惊叹.
Singleton单例模式