多くの人によると、1.5以降を実行していない限り、volatile
というキーワードを使用しない限り、多かれ少なかれ一般的なダブルチェックロックのイディオムがJava用に壊れています。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
上記ピューの分析は、Java仮想マシン用です。 Androidで動作し、Double-Checked Lockingを使用するライブラリを頻繁に使用します。 dalvik VMのメモリモデルはこのイディオムをサポートしていますか?
おそらく私が見ていたところで推測することができます;) – Snicolas