o seguinte código:
public int x;
public void metodo1(){
--x;
}
public synchronized void metodo2(){
x = 11;
metodo1();
assert (x == 10);
}
Pode ou não lançar um assertion error?
Ou seja, a dúvida é: O método não sincronizado é chamado de dentro do método sincronizado, durante essa chamada, outras treads podem acessar o objeto?
[]'s
[quote=tiostan]o seguinte código:
public int x;
public void metodo1(){
--x;
}
public synchronized void metodo2(){
x = 11;
metodo1();
assert (x == 10);
}
Pode ou não lançar um assertion error?
Ou seja, a dúvida é: O método não sincronizado é chamado de dentro do método sincronizado, durante essa chamada, outras treads podem acessar o objeto?
[]'s
[/quote]
Pode lançar AssertionError.
Thread1 entra em metodo2, seta o x para 11, entra em metodo2 e coloca o x em 10. Logo após, Thread2 chama o metodo1 (sem ser de dentro de metodo2) e deixa x em 9. Thread1 continua e chega no assert. AssertionError.