Olá, bom dia!!
Estou com uma dúvida sobre o uso do syncronyzed. Entendi que deveria ser utilizado quando deseja que apenas uma thread acesse o recurso e que ele vai ser executado até que finalize, ou seja, de forma atômica.
Sobre os formatos, poderia usar synchronized (this), sincronizando o objeto, e public synchronized ... , sincronizando acesso ao método, e aí foi quando as dúvidas surgiram. Então considerando,
Dois metódos com bloco de código usando synchronized (this):
- Se temos uma classe Banheiro com duas instâncias. Se cada uma tiver uma thread, elas podem executar de forma corrente porque não teria bloqueio. Entendo que seria como tivesse dois banheiros disponíves, então duas pessoas podem acessar ao mesmo tempo.
Dois metódos usando synchronized (this):
- Considerando duas instâncias de Banheiro, como o acesso ao método que é sincronizado, apenas uma instância acessa o metódo por vez, certo? Logo, mesmo que dois banheiros esteja disponível, apenas um pode ser usado por vez.
Seria essa a diferença? Caso não, poderia me explicar e apresentar exemplos? Mencionei o uso de Banheiro por ser o mesmo que o professor Nico utilizou nas aulas.