По мнению многих, некоторая общая идиома с двойной проверкой блокируется для java, если вы не используете 1.5 или новее и используете ключевое слово volatile
.Двойная проверка блокировки в 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 VM. Я работаю на Android и часто использую библиотеки, которые используют Double-Checked Locking. Поддерживает ли модель памяти dalvik VM эту идиому?
Возможно, вы догадались, на что я смотрел;) – Snicolas