Prezados senhores,
 
Imaginem a seguinte classe:
 
public class MinhaClasse {
  public void metodo() {
    int a, b, c;
    // algum processamento demorado utilizando
    // as variáveis automáticas "a", "b" e "c"
  }
}
 
Na máquina virtual há apenas um objeto desta classe, denominado "meuObjeto".
 
Imaginem também que na máquina virtual há mais três threads em execução. Em cada uma destas threads há uma referência a "meuObjeto" -- logo, há um problema de acesso concorrente ao método "metodo()". Como vocês podem observar, este não é um método "synchronized", e portanto poderá haver acesso simultâneo por meio das três threads.
 
A pergunta é: quando as threads estão executando o método "metodo()", elas obterão os mesmos valores para as variáveis "a", "b" e "c" ou para cada cliente haverá um conjunto de valores diferente (ou seja, áreas de memória diferentes, sendo empilhadas e desempilhadas de acordo com a necessidade)?
 
A resposta deve ser embasada em alguma boa referência (especificação da Sun, livros conhecidos), e não em achismos ou livros de má qualidade.
 
(Quem responder primeiro ganha uma caixa de Bis! ;-D)
 
Augusto Jun Devegili
Software Architect @ NeoGrid S.A.
Phone: +55 (47) 422-7099
Sun Certified Architect for Java Technology 1.2
Sun Certified Developer for the Java Platform 1.1
Microsoft Certified Professional
 

Responder a