作者HYL (@Seattle)
看板Soft_Job
标题Re: [讨论]国外软体工程师与台湾的差别
时间Mon Jun 9 04:28:30 2008
※ 引述《Harifucks (就是要战脑残保险业务)》之铭言:
: : 以java的角度来看就是 用太多singleton pattern 又没做好thread protected
: : 导致production上大量交易时会有dirty read情况
: : 後来其他模组也出现类似问题
: : 我只能说一个简单的 singleton pattern 乱用 也会搞砸整锅粥
: : 该系统在全世界不知道卖给多少家客户了 竟然还会如此不重视此问题
: : 所以外来的和尚有好的也又坏的啦 大家都是人啦
:
: 对不起,既然R大提到singleton pattern,那顺便请问技术问题。
: 对於singleton pattern的存取,不是用static synchronized就可以解决了吗?
: 还有什麽应该注意的,谢谢指导!
synchronized不是万能,像是底下的code就不是thread safe...
class CustomerInfoFactory {
private static HashMap cMap = null;
public static synchronized Map getInstance(){
if( cMap == null )
cMap = new HashMap();
return Map;
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 24.18.234.113
1F:推 redray:为什麽这不是 thread-safe? 06/09 11:17
2F:推 opman:是不是打错了,好像应该是 return cMap; 06/09 11:52
3F:推 kimkao:这应该只是保证Single instance吧? 06/09 12:25
4F:推 kimkao:这样并不会是thread-safe,因为return的map,可以被修改 06/09 12:53
5F:推 chihyi1980:嗯, 这样最後return 的cMap就pass by reference了.. 06/09 13:32
6F:推 ritchieHsu:这样写的目的不就是要让cMap众人用呀 干麻要safe呀 @@ 06/09 23:43
7F:推 redray:我知道 map 不是 thread-safe,但是上面那段 code 是 thread 06/10 01:33
8F:→ redray:-safe,应该要精确一点来说明,我原本以为上面那段 code 本 06/10 01:34
9F:→ redray:身不是 thread-safe,就像是 double-checked locking 的情况 06/10 01:35