> Fabio Retzlaff wrote:
> 
> 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)?

No caso, as suas variaveis sao variaveis de metodo, e nao de classe, e
portanto, cada execussao do metodo tera seus proprios valores das
3 veriaveis. Ou seja, sim, elas sao "empilhadas e desempilhadas" de
acordo com a necessidade. Nesse caso, as variaveis nem precisam ser
"automaticas", elas podem inclusive ser passadas como parametro
para o metodo, por exemplo.

Se o seu metodo nao utiliza nem modifica nenhum estado do seu
objeto (ou seja, nao mudas as variaveis de classe), ele nao precisa 
ser syncronizado. Agora, se voce tiver algo como:

public class MinhaClasse {

   public int varDeClasse = 0;

   public void metodo() {
     int a, b, c;
     // algum processamento demorado utilizando
     // as vari�veis autom�ticas "a", "b" e "c"
        
        ...
        varDeClasse = a + b + c;
        ...

   }
 }
 
Nesse caso, o valor de varDeClasse sera unico para todos os threads,
e portanto, os resultados desse metodo poderao ser totalmente
indeterminados, dependendo da ordem de execussao dos threads.

> 
> 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.
> 

Nossa, voce precisa de uma referencia? Isso parece intimidacao, mas
se voce gostar, eu sempre sugiro a todos os bons desenvolvedores
que eles deveriam ler o livro "The Java Language Specification",
(eh gratuito via web...), e tambem o "The Java Virtual Machine
Specification". Muitas das suas duvidas _realmente_ tecnicas
serao respondidas por esses dois livros.

De qualquer forma, sugiro a leitura do capitulo 17 do livro acima,
que, entre outras coisas, diz que:

"Every thread has a working memory in wicth it keeps its own
working copy of variables it must use or assign. As the thread
executes a Java program, it operates on these working copies.
..." etc, etc.

> (Quem responder primeiro ganha uma caixa de Bis! ;-D)
> 

A menos que alguem ja tenha respondido, estou esperando.

Bruno.
______________________________________________________________________
Bruno Peres Ferreira de Souza                         Sun Microsystems
System Engineer - Java Technologist         [EMAIL PROTECTED]
        if I fail, if I succeed, at least I live as I believe
* Para nao receber mais e-mails da lista, acesse 
<http://www.sun.com.br:8080/guest/RemoteAvailableLists>, coloque seu e-mail, escolha a 
lista <[EMAIL PROTECTED]> e de um <submit>.

Responder a