【发布时间】:2011-08-08 16:39:27
【问题描述】:
根据许多人的说法,Java 中有些常见的 Double-Checked Locking 习惯用法已被破坏,除非您运行的是 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 虚拟机的。我在 Android 上工作,经常使用采用双重检查锁定的库。 dalvik VM 的内存模型是否支持这种习惯用法?
【问题讨论】:
-
你大概能猜到我在看哪个;)
标签: java android virtual-machine dalvik double-checked-locking