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?
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?
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!
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?
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.
se vc estiver realmente certo, broder, então respondeu minha dúvida.
vlw, broder. 