java ukončení uspaného vlákna
Ahoj, děláme v javě jeden prográmek ve škole a mám problém s ukončením uspaného vlákna...hází to vyjímku "Exception in thread "AWT-EventQueue-0" java.lang.IllegalMonitorStateExcept
mám to takto:
první třída:
Vlakno vln = new Vlakno();
vln.start();
...
...
...
vln.konec=1;
vln.notify();
a třídu s vláknem:
public class Vlakno extends Thread {
Parser prs = new Parser("něco1", "něco2");
public byte konec = 0;
public void run() {
while (konec == 0) {
try {
if (prs.parsuj() == 1) {
System.out.println("ok");
Thread.sleep(60000);
} else {
System.err.println("Chyba");
return;
}
} catch (InterruptedException ex) {
Logger.getLogger(Vlakno.class.getName()).log(Level.SEVERE, null, ex);
}
}
return;
}
}
Když vlákno spí, tak ho musím nejdříve probudit, tak zavolám notifyall a spadne to...neví co s tím?Když jen dám pomocí proměnné "konec" příznak na ukončení a nedám notiffy, tak musím čekat až se vlákno probudí, zkontroluje podmínku a pak se normálně ukončí...jenže já potřebuji ukončení hned...a né čekat...
děkuji za pomoc...
na objekte mozes zavolat wait/notify/notifyAll ak vlastnis jeho lock,
inka dostanes IllegalMonitorStateExcept, cize takto nejako:
ak potrebujes cakat vo vlakne na prebudenie (s timeoutom 60 sekund),
tak nie cez Thread.sleep ale cez wait()
díky moc..vlákno se opravdu ukončí...
ale teď je problém ho znova nahodit...
když dám po ukončení znovu
tak to hodí chybu:
Nevíte co s tím?díky moc
EDIT:
zatím jsem to vyřešil takto, ale nevím, zda je to dobré řešení:
Nastartovat thread sa da len raz, tu je javadoc ku start metode:
Ak chces aby stale bezalo dookola, tak ho neukoncuj.
Inak potom samozrejme urobit novu instanciu, ako mas v poslednej ukazke...
..ale ten if je tam zbytocny, stale to bude false, kedze si nezavolal start()
na tom novom objekte....
cize staci: