PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
java
[問題] Singleton 雙重檢查鎖請益
作者:
v9290026
(CH)
2014-12-05 10:27:37
各位大大好,目前正在k Design Patten,
下面有一段code裡面關於synchronized的部分想請教:
public class Singleton{
private volatile static Singleton uniqueInstance;
private Singleton(){}
public static Singleton getInstance(){
if(uniqeInstance == null){
synchronized(Singleton.class){
^^^^^^^^^^^^^^^^^
if(uniqeInstnace == null)
uniqueInstance = new Singleton();
}
}
}
}
對Synchronized block的觀念比較薄弱,以前大部分都用this,
用來鎖當前物件比較多,想請問這邊的Singleton.class鎖的是? 感謝!!
作者:
ssccg
(23)
2014-12-05 14:12:00
Class物件,每個類別會有一個由ClassLoader載入的通常就跟getClass()回傳的是同一個synchronized static method一樣是鎖這個物件
作者:
v9290026
(CH)
2014-12-05 14:26:00
第二句秒懂啊,感謝所以鎖靜態method,因為不會宣告object,也是鎖該依附的class意思嗎?
作者:
luoqr
(.....)
2014-12-06 07:52:00
第一個if可能沒有用?
作者:
bitlife
(BIT一生)
2014-12-06 08:55:00
有用,避免未來非必要的進入 synchronized block
作者:
luoqr
(.....)
2014-12-08 21:23:00
我也覺得有用 不過
http://ppt.cc/5etP
好像可能沒用fortify之類的掃描原始碼工具還會把這種寫法當作有問題 @@但直覺得我是認為多判斷一次null好像比較快 @@
作者:
ssccg
(23)
2014-12-09 10:39:00
要lazy init直接用static inner Holder那招比較好由JVM/Classloader處理初始化,連檢查null都不用
作者:
Killercat
(殺人貓™)
2014-12-10 01:26:00
你是說static區塊嘛?大多數的情況來講是對的
繼續閱讀
[問題] 字串 資料分格
ozone
[問題] 架購設計, 碎片分割
tas72732002
[問題] InputStream「分支」式包裝
willy69wu31
[問題] IO問題
frankfgt
[問題] 微軟開源.NET對Java會影響很大嗎?
dharma
[問題] jsp ios 8 touch-icon 無法顯示
KoalaYu
[問題] 初學者請益方法命名問題
oklp1415
Re: [請益] 請問Java 新手和高手的差別..?
OriginStar
[URL] JCConf 2014 的投影片跟錄影上線
qrtt1
Fw: [請益] 請問Java 新手和高手的差別..?
UNIQLOCK
Links
booklink
Contact Us: admin [ a t ] ucptt.com