Sincronismo e Threads

4 respostas
H

Pessoal, estou com dúvida em relação ao uso do synchronized.
Só tem sentido usar o synchronized em dois ou mais métodos diferentes da mesma classe?

ou seja, se for usar o synchronized em apenas um método, não terá efeito de nada?

4 Respostas

rubinelli

Claro que tem efeito! Eu vou te mostrar um exemplo. Suponha que você tenha uma método que realize uma inicialização importante, e que você queira que essa inicialização seja feita apenas uma vez. Você poderia escrever assim:

private boolean inicializado = false;

public synchronized void inicializa() {
  if(!inicializado) {
    // inicializa o objeto aqui
    ...

    inicializado = true;
  }
}

Imagine o que poderia acontecer se não houvesse a sincronização e, enquanto uma thread estivesse inicializando o objeto, uma segunda thread executasse inicializa(). A flag inicializado ainda valeria false, e a inicialização seria executada uma segunda vez, exatamente o que não queríamos!

H

então o uso do synchronized serve apenas para dizer que se um método do mesmo objeto já foi chamado por uma thread, ele não pode ser chamado por outra thread?

D

Broder, eu sou novo, e se não me engano synchronized sinaliza que um método/variavel não pode ser executado/acessado enquanto uma outra tread o esta executando/acessando.
Descupa qualquer erro, mas se não me engano é isso.

H

se vc estiver realmente certo, broder, então respondeu minha dúvida.
vlw, broder. :smiley:

Criado 6 de dezembro de 2007
Ultima resposta 6 de dez. de 2007
Respostas 4
Participantes 3