observe que os objetos são diferentes na sincronização… um é da instancia e outro é static… um nao bloqueia o outro…
Bom essa questao é do whizlabs eu errei… mais a melhor pessoa que eu conheço aqui no forum que daria uma boa aula disso ai é o vinny, hehe… bora ver se ele posta… ai… quero aprender
CarlosEduardoDantas
LPJava:
observe que os objetos são diferentes na sincronização… um é da instancia e outro é static… um nao bloqueia o outro…
Bom essa questao é do whizlabs eu errei… mais a melhor pessoa que eu conheço aqui no forum que daria uma boa aula disso ai é o vinny, hehe… bora ver se ele posta… ai… quero aprender :D
obrigado, mas essa resposta sua o whizlabs ja respondeu pra mim… queria saber como corrigir… e outra coisa… não tem nada a ver ser static ou não… .se tu tirar o static, e criar a instancia no main(), o resultado é o mesmo.
mas d qq forma obrigado
LPJava
é rpz… realmente nao. eu errei essa questao… sei que os objetos de bloqueio sao diferentes… fiquei de ler hj a explicacao do whizlabs…
Teoria básica antes: Para chamar wait() ou notify() em um objeto é preciso obter o bloqueio do mesmo (através do uso de synchronized).
No código acima, você obteu o bloqueio do objeto sa = new String(“Not Done”);
Mas está tentando chamar notify() no objeto criado dentro do bloco… sa = new String(“done”); (o qual você não possui o lock) e, por isso, está sendo lançada IllegalMonitorStateException.
Provavelmente, pra evitar essa exceção, basta sincronizar o segundo objeto criado dentro do bloco synchronized (ou apenas comentar a linha de criação).
synchronized(sa){//pegabloqueiodo"sa"staticpraconfundirnaquestãosa=newString("done"); synchronized(sa){//pegabloqueiodosarecém-instanciadosa.notify(); }
}
//ousynchronized(sa){//pegabloqueiodo"sa"static//sa=newString("done"); não instancia um novo objetosa.notify(); //chama notify() naquele objeto referenciado por "sa", do qual já possui o bloqueio}
}
[]'s
LPJava
hum foi o que falei… antes… pegadinha… ai… qdo eu respondi ela pela primeira vez… nao me liguei e marquei errado… e depois que aprendi e lembrei da regra… boa RAfafel
CarlosEduardoDantas
muito obrigado rafael…
tirou todas as minhas duvidas… obrigado
ViniGodoy
LPJava:
observe que os objetos são diferentes na sincronização… um é da instancia e outro é static… um nao bloqueia o outro…
Bom essa questao é do whizlabs eu errei… mais a melhor pessoa que eu conheço aqui no forum que daria uma boa aula disso ai é o vinny, hehe… bora ver se ele posta… ai… quero aprender :D
Não vi tópico a tempo. Mas esse, na minha opinião, é mais um exemplo de como não se trabalhar com threads.