根据许多人的说法,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的内存模型支持这个习惯用法吗?
https://stackoverflow.com/questions/5717090
复制相似问题