Duvida sobre synchronized - [Resolvido]

Olá, gostaria de saber se quando eu tenho um método sincronizado em um objeto, quando outra thread tenta acessar outro método desse objeto o mesmo é lockado?

Pergunto isso por que nesse artigo o autor diz que o objeto inteiro é sincronizado.

http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/threads/sincronizacao.html

Nesse caso se não for, como posso sincronizar o objeto inteiro para que quando uma thread estiver utilizando, outra espere o acesso ao mesmo?

Desde já agradeço a todos.

[quote=laudenpower]Olá, gostaria de saber se quando eu tenho um método sincronizado em um objeto, quando outra thread tenta acessar outro método desse objeto o mesmo é lockado?

Pergunto isso por que nesse artigo o autor diz que o objeto inteiro é sincronizado.

http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/threads/sincronizacao.html

Nesse caso se não for, como posso sincronizar o objeto inteiro para que quando uma thread estiver utilizando, outra espere o acesso ao mesmo?

Desde já agradeço a todos.[/quote]

Sim, um método sincronizado pega o lock no objeto inteiro (lembrando que os métodos wait e notify, por exemplo, são feitos em cima do objeto, não da thread). Esse lock só é liberado se a thread fizer uma chamada a wait(), por exemplo.

[]´s

Então nesse caso se uma thread acessa o objeto, enquanto ela estiver utilizando o método sincronizado, as demais threads deverão esperar até essa thread terminar o processamento? Nesse caso o lock só é utilizado no momento do acesso ao método sincronizado ou no acesso a qualquer método da do objeto (incluindo os não sincronizados?)

Desde já gostaria de agradecer a atenção e gostaria de me colocar a disposição para ajuda-lo no que estiver ao meu alcance :slight_smile:

Se o outro método for sincronizado, sim.

[quote=laudenpower]
Nesse caso se não for, como posso sincronizar o objeto inteiro para que quando uma thread estiver utilizando, outra espere o acesso ao mesmo?

Desde já agradeço a todos.[/quote]

Coloca synchronized em todos os metodos publicos do objetos.

Vale lembrar que o método sincronizado pede o lock em cima do objeto, e a thread espera enquanto não obtiver o lock. Se o método não for sincronizado, a thread não vai requerer o lock e vai executar normalmente.

[]´s

Desde já gostaria de agradecer a todos que ajudaram para que dessa forma eu possa encerrar a minha participação nesse tópico. Desde já muito obrigado :smiley: