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?

questionAnswers(2)

yourAnswerToTheQuestion