安卓系统中的双重检查锁定
2022-09-02 14:01:22
根据许多人的说法,Java中常见的双重检查锁定习语被打破了,除非您运行的是1.5或更高版本并使用关键字。volatile
损坏的双重检查锁示例:
// 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 VM的。我在Android上工作,经常使用采用双重检查锁定的库。dalvik VM的内存模型是否支持这个成语?