Ola galera. To com duvida no seguinte: quando se utiliza sincronização de métodos, o objeto da classe com o método sincronizado também fica bloqueado? Mesmo os métodos não sincronizados?
nao fica nao!
soh as chamadas aos metodos sincronizados que vao ficar esperando ateh que o lock esteja liberado para outra thread pegar o lock!
um metodo sincronizado (nao estatico) eh a mesma coisa que
synchronized (this)
Bem, eu insisto neste assunto porque no endereco http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#260 esta sendo dito que o metodo sincronizado “locka” automaticamente o objeto antes de executar o body e “deslocka” ao retornar. E no item 8.4.3.6 nesta mesma pagina mostra-se um exemplo. Talvez a explicacao que esteja neste endereco esteja muito superficial, mas eu nunca entendi esta parte direito.
nao eh que ele LOCKA o objeto. Ele locka aquele trecho atraves do lock do objeto. Eh MUITO diferente e nao eh facil de entender pela primeria vez.
Mas voce pode testr ai mesmo, cria um metodo sincronizado, que tenha um loop infinito.
Uma thread chama esse metodo desse objeto, outra thread chama o metodo NAO sincronizado desse objeto, voce vai ver que os dois ocorrem.
metodos nao sincronizados nao precisam adquirir o lock! O lock de um objeto nao tem NADA a ver com ele estar “congelado” para uso. Quem congela eh a thread, nao o objeto.