作者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
推 redray:為什麼這不是 thread-safe? 06/09 11:17
推 opman:是不是打錯了,好像應該是 return cMap; 06/09 11:52
推 kimkao:這應該只是保證Single instance吧? 06/09 12:25
推 kimkao:這樣並不會是thread-safe,因為return的map,可以被修改 06/09 12:53
推 chihyi1980:嗯, 這樣最後return 的cMap就pass by reference了.. 06/09 13:32
推 ritchieHsu:這樣寫的目的不就是要讓cMap眾人用呀 幹麻要safe呀 @@ 06/09 23:43
推 redray:我知道 map 不是 thread-safe,但是上面那段 code 是 thread 06/10 01:33
→ redray:-safe,應該要精確一點來說明,我原本以為上面那段 code 本 06/10 01:34
→ redray:身不是 thread-safe,就像是 double-checked locking 的情況 06/10 01:35