Bloqueio duplo verificado no Android
De acordo com muitos, o idioma de bloqueio duplo verificado de certa forma comum é quebrado para java, a menos que você esteja executando a versão 1.5 ou posterior e use ovolatile
palavra-chave.
Uma amostra de bloqueio com verificação dupla quebrada:
// 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...
}
A amostra vem deste artigo, que também fornece detalhes sobre como corrigi-lo:http: //www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.htm
análise de @ Pugh acima é para VMs Java. Trabalho no Android e frequentemente uso bibliotecas que empregam o bloqueio com verificação dupla. O modelo de memória da VM do dalvik suporta esse idioma?