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);             
>            }
>        }
>    }
>


Odpovedet emailem