根據許多人的說法,除非您運行1.5或更高版本並使用volatile
關鍵字,否則Java的某些常見的Double-Checked Locking成語已被破壞。Android中的雙重鎖定鎖定
阿破雙重檢查鎖定樣本:
// Broken multithreaded version
// "Double-Checked Locking" idiom
class Foo {
private Helper helper = null;
public Helper getHelper() {
if (helper == null)
synchronized(this) {
if (helper == null)
helper = new Helper();
}
return helper;
}
// other functions and members...
}
樣本來源於此文章,這也提供了關於如何解決它的詳細信息:以上 http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
Pugh的分析是Java虛擬機。我使用Android並經常使用採用雙重檢查鎖定的庫。達爾維克虛擬機的內存模型是否支持這種習慣用法?
你可以猜到我在看什麼;) – Snicolas 2014-02-10 21:11:23