當我讀維基百科的約成語文章,我感到困惑的是執行:爲什麼使用單獨的包裝類實現此雙重檢查鎖?
public class FinalWrapper<T> {
public final T value;
public FinalWrapper(T value) {
this.value = value;
}
}
public class Foo {
private FinalWrapper<Helper> helperWrapper = null;
public Helper getHelper() {
FinalWrapper<Helper> wrapper = helperWrapper;
if (wrapper == null) {
synchronized(this) {
if (helperWrapper == null) {
helperWrapper = new FinalWrapper<Helper>(new Helper());
}
wrapper = helperWrapper;
}
}
return wrapper.value;
}
}
我只是不明白爲什麼我們需要創建包裝。這不夠嗎?
if (helperWrapper == null) {
synchronized(this) {
if (helperWrapper == null) {
helperWrapper = new FinalWrapper<Helper>(new Helper());
}
}
}
是因爲使用的包裝,因爲包裝存儲在堆棧和helperWrapper存儲在堆可以加快初始化?
@pst:我想他問的是附加的'wrapper'局部變量,它包含'helperWrapper'副本。 – casablanca
@casablanca哦,哼哼,完全錯過了這個角度....現在我很困惑,因爲問題的其他措辭。 「我不明白爲什麼我們需要創建一個包裝。」 :( – 2012-01-24 06:59:48
偉大的問題的方式。歡迎來到SO! – Voo