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.
[quote]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)[/quote]
Alguém poderia me explicar ?
[quote=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 ?[/quote]
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.
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…