Sincronizando threads

6 respostas
derheimen

Seque o código:

public class Waiting implements Runnable { boolean flag = false; public static void main(String[] args) { Waiting w = new Waiting(); new Thread(w).start(); new Thread(w).start(); } public void run() { if (flag) { flag = false; System.out.print("1 "); try { wait(); } catch (Exception e) { } System.out.print("2 "); } else { flag = true; System.out.print("3 "); try { Thread.sleep(2000); } catch (Exception e) { } System.out.print("4 "); notify(); } } }
Por que ao chamar o método notify() lança esta exceção.

<blockquote>3 1 2 4 Exception in thread “Thread-1” java.lang.IllegalMonitorStateException: current thread not owner

at java.lang.Object.notify(Native Method)

at capitulo09.definindoInstanciandoIniciando.Waiting.run(Waiting.java:29)

at java.lang.Thread.run(Unknown Source)</blockquote>

Alguém poderia me explicar ?

6 Respostas

renandemelo

Você não pode dar nem wait() nem notify() fora de um método/bloco sincronizado

derheimen

Até ai tudo bem, isto eu sei.
Mas porque o código roda o wait() e na hora que vai executar o método notify() lança a exceção ?

renan_java

Heider Matos:
Até ai tudo bem, isto eu sei.
Mas porque o código roda o wait() e na hora que vai executar o método notify() lança a exceção ?

Isso está ocorrendo pq seu wait() está dentro do bloco do try, já o notify() está fora, portanto se haver o erro durante o notify não haverá o catch para tratar este erro, pois vc colocou o notify fora do bloco do try.

LPJava

lembre-se que o catch ele trata… uma exeção que for acontecer em try{} e vc colocou o wait dentro do try{} se der merda ai ele vai para o catch que pode tratar o tipo de exeção mais kd o notify() do wait() que voce criou la no try{} por isso a exeção eh lançada parceiro resumindo eh o q renan_java falou…

derheimen

Valeu galera… não tinha percebido este detalhe…
Fuiiiiiiiii…

LPJava

pode ir pode irrrrrrrrrrr… mais obrigado :smiley:

Criado 29 de janeiro de 2007
Ultima resposta 29 de jan. de 2007
Respostas 6
Participantes 4