Zdravím,
a co použít Object.wait() v synchronizovane sekci a pro probuzení vlákna
použít Object.notify()?
S pozdravem
Martin Rubeš
příklad:
public class Example implements Runnable {
private Object LOCK = new Object();
private boolean interrupted = false;
private int DELAY = 10000;
public void run() {
while (!interrupted) {
synchronized (LOCK) {
try {
LOCK.wait(DELAY);
} catch (InterruptedException e) {
interrupted = true;
}
}
}
System.out.println("probuzeno");
}
public wakeUp() {
synchronized (LOCK) {
interrupted = true;
LOCK.notify();
}
}
}
Martin Jedlička napsal(a):
> Zdravim,
> mam takovy problem s vlaknem. Mam nize uvedene vlakno, ktere po
> startu spustim s m_konec nastavenym na true, takze jde vlakno hned do
> spanku. Coz je dobre. Potom vlakno probudim metodou interrunt() a
> nastavim m_konec na false. V teto chvili ale chci, aby vlakno
> pokracovalo a provadel se cyklus do-while, ve kterem mam hlidani
> interrupted(). Toto hlidani tam mam z duvodu, kdy potrebuju predcasne
> ukoncit cele vlakno a prave se nachazi v tomto cyklu. Problem ale je,
> ze pri prvnim spusteni, kdyz provedu interrupt() tohoto vlakna
> (probuzeni), tak se prerusi hned i ten cyklus, coz nechci. Nevite
> nekdo, jak to obejit?
>
> Potrebuju od vlakna:
> - na zacatku uspat
> - pote probudit a pokracovat cyklem do-while
> - v pripade, ze je vlakno v cyklu do-while moct vlakno predcasne
> ukoncit z mainu.
> - toto vlakno je v nekonecnem cyklu a zastavuje se interruptem a
> nastavenim m_konec na tru
>
> Diky moc.
>
> Martin
>
>
>
> class Vlakno extends Thread {
> boolean dockal_se = false;
>
> public void run(){
>
> while(true) {
> if(m_konec) {
> try {
> Thread.sleep(dlouhy_cas);
> } catch (InterruptedException ex) {
> System.out.println("probuzeno");
> } }
> do {
> if (interrupted()) {
> return;
> }
> // cekani na neco..napr. na
> nastaveni nejake synch. glob. promenne v jinem vlakne
> } while(dockal_se);
> }
> }
> }
>