Chamada de Metodo

5 respostas
ccaneta

Pessoal,

Estou com uma duvida, imaginem que vcs tenha um metodo static que receba um objeto como parametro. Dentro do metodo estou atualizado o objeto passado por referencia, haveria algum problema qdo houvesse multiplas threads acessando o mesmo metodo.

Haveriam multiplos objetos em diferentes stacks e com isso nao teria problemas com a informação alterada ou há chance de ter um conflito com os dados que estariam sendo devolvidos para o chamador ?

Precisaria estar sincronizando esse metodo para evitar problemas?

Exemplo de Codigo:

class Teste{

public static void metodo (Object a){

a.setValue(1);

}

}

Obrigadooo

5 Respostas

Rafael_Nunes

Eu creio que não, pois cada objeto modificado teria sua própria referência.

peron

Se os dois Threads nao passarem o mesmo objeto em memória também acredito que nao haverá problemas…

vlws

1112

Não sei se entendi direito sua dúvida, pode explicar melhor?

Quando múltiplas threads alteram o estado de um objeto, você precisa tratar isso de acordo com sua explicação. Por exemplo, o método seguinte (que depende do estado do objeto e altera o estado do mesmo objeto), se chamado por múltiplas threads para a mesma instância, teria resultados imprevisíveis:

class Teste {
    public double x;
    
    public double metodo() {
        if( x > 5 ) {
            x += 1;
        }
        else {
            x -= 0.5;
        }
    }
}

Quando se sincroniza um método, o que acontece é que duas threads não podem chamar o método dessa mesma instância antes que a thread que está executando o método termine de executá-lo. Assim, pode-se controlar um pouco mais, mas ainda assim cuidado, já que não há como saber exatamente qual thread seria a primeira a acessar o método.

ccaneta

Pessoal,

O chamador seria via web, em cada requisição eu estaria criando um novo Objeto e passando para o metodo static da outra classe via referencia.

Nesse cenário não haveria problema de perda de dados, certo??

Valeu!!

1112

Se você usa instâncias diferentes, não vai ter problemas de concorrência no acesso ao seu objeto.

Outra coisa, em Java não existe passagem de parâmetros por referência, vide http://www.guj.com.br/posts/list/24894.java e http://www.guj.com.br/posts/list/19722.java .

Criado 12 de abril de 2006
Ultima resposta 12 de abr. de 2006
Respostas 5
Participantes 4