1.4 http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html 有一個雙重檢查問題是否在以後的JDK中修復?雙重支票問題是固定在1.6還是1.7?
0
A
回答
4
不,它不是固定的,不會被固定。 Java 5剛剛明確指出,這個習語被打破了,這是最終的裁決。懶洋洋地初始化實例字段的正確方法涉及到另一個,同樣叫成語:在仔細檢查成語:
// Double-check idiom for lazy initialization of instance fields.
private volatile FieldType field;
FieldType getField() {
FieldType result = field;
if (result == null) { // First check (no locking)
synchronized(this) {
result = field;
if (result == null) // Second check (with locking)
field = result = computeFieldValue();
}
}
return result;
}
參考:喬希布洛赫,有效的Java。另見this Oracle technetwork interview with Josh Bloch。
8
一個簡單的谷歌出現在該
- 如果使用一種特定的方式將其固定在Java 5中(見馬爾科的答案)
- 它仍然不是好主意。通常一個簡單的
enum
是更好的解決方案。
而是寫
public final class Singleton {
// Double-check idiom for lazy initialization of instance fields.
private static volatile Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
Singleton result = instance;
if (result == null) { // First check (no locking)
synchronized (Singleton.class) {
result = instance;
if (result == null) // Second check (with locking)
instance = result = new Singleton();
}
}
return result;
}
}
,你可以只寫
public enum Singleton {
// Thread safe lazy initialization of instance field.
INSTANCE
}
相關問題
- 1. py.test「 - collectonly不尊重-k」問題是不是固定的?
- 2. 如何使用javac 1.7而不是1.6?
- 3. java -version顯示1.7當java是1.6
- 4. 如何判斷TJvDockServer表單是固定還是固定?
- 5. 是Unicorn還是Selenium問題?
- 6. mod_wsgi問題還是?
- 7. SEOmoz顯示10k +抓取錯誤 - 302重定向問題,magento 1.6和1.7
- 8. 支票號碼是偶數還是奇數
- 9. GWT 1.7是否支持Class.getSimpleName()?
- 10. Phonegap是否支持Android 1.6?
- 11. (練習1.6 K&R)如何確定getchar()!= EOF是0還是1?
- 12. UITableViewCell中的固定尺寸imageView還是固定文本定位?
- 13. 什麼是更好的分支預測器?雙峯還是Gshare?
- 14. RaphaelJS問題... DRAW還是REDRAW?
- 15. 固定定位重疊問題
- 16. 它是視口問題還是什麼?
- 17. 這個數組是固定的還是臨時鎖定的
- 18. 不受支持major.minor版本.51和在Java 1.6上運行java 1.7代碼1.6
- 19. Laravel支票託收是空
- 20. bash雙支架問題
- 21. 問題運行的似乎對batik.css 1.6和1.7
- 22. XSLFO是否支持固定佈局?
- 23. 問題的立場:固定的,DIV是不是真的在那裏應該是
- 24. 在CentOS 5.9上顛覆1.7好嗎?或1.6是最新的穩定?
- 25. 這是Django教程或包問題的問題,還是我?
- 26. 這是服務器問題還是plesk問題?
- 27. 這是Sinatra配置問題還是Apache配置問題?
- 28. 字符編碼是硬件問題還是軟件問題?
- 29. 職位固定重疊問題?
- 30. 固定導航欄重疊問題
在您發佈的同一篇文章中進一步移動,表明它已在Java 5中修復。 –