Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

wait()....notifyAll

[es] :: Java :: wait()....notifyAll

[ Pregleda: 1965 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mightymv
Beograd

Član broj: 42855
Poruke: 16
212.200.124.*



Profil

icon wait()....notifyAll09.03.2005. u 15:00 - pre 232 meseci
evo ga kod
Code:
 import java.io.*;
class T extends Thread{
    public static int q;
    public static boolean i=false;
    
    T(){}
    public synchronized void kreni() {
                       try { 
                           
                       while(i!=true) wait();
                       }
                       catch(Exception e){System.out.println("G 1");}
                       System.out.println("Sve OK!");
    }
    public synchronized void promeniUslov(){ 
                         try {while(System.in.read()!=65) {}} catch (Exception e){System.out.println("G 2");}
                         i=true;
                         System.out.println(3);
                         notifyAll();
                         System.out.println(4);
    }
    public void run(){
        if (q==0){
            System.out.println(1);
            q=1;
            kreni();}
        else {System.out.println(2); promeniUslov();}
    }
        
    }

public class Pokusaj2 {
    
    /** Creates a new instance of Pokusaj2 */
    public Pokusaj2() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        T t1=new T();
        t1.start();
        T t2=new T();
        t2.start();
        
        // TODO code application logic here
    }
    
}


interesuje me zasto ovaj kod ne radi.
Odnosno, zasto se ne zavrsi izvrsavanje.
izlaz je ovakav:----
1
2
(ovde ja ukucavam): a s r A
3
4
-------
i sada ovde blokira.
zar nije ispunjen uslov da se prva nit odblokira? i=true;
Kod nicemu ne sluzi, nego sam ja samo probao da vidim kako stvari funkcionisu.

Interesuje me i to, da li
notifyAll() deluje samo na niti koje su istog tipa kao objekat koji je pozvao ovu metodu ili ne?
Ako je odgovor DA, kako se vrsi komunikacija izmedju niti razlicitog tipa?
Mislim, jedna nit je blokirana sa wait() i ceka uslov koji bi trebalo da joj postavi neka druga nit
potpuno drugog tipa. Da li ja uopste dobro razmisljam po ovom pitanju?

hvala.
--------------------
mightymv
 
Odgovor na temu

StMilan

Član broj: 5061
Poruke: 144
*.ptt.yu.



Profil

icon Re: wait()....notifyAll10.03.2005. u 10:49 - pre 232 meseci
Ne razmisljas dobro.
wait() i notifyAll() rade nad objektima.
Ti ovde imas dva razlicita objekta T1 i T2. Dva treda koja imas se blokiraju na razlicitim objektima. Posto koristis synchronized metode, ti objekti su bas ta tvoja dva treda.

Meni se cini da efekat koji si zeleo da postignes mozes da dobijes tako sto ces ove dve metode da stavis da budu staticke. Tada ce tredovi da se blokiraju na monitoru objekta T.class

Pogledaj jos malo semantiku wait() i notifyAll(). Ona je direktno vezana za lock nad objektom nad kojim je uradjen synchronize.
 
Odgovor na temu

[es] :: Java :: wait()....notifyAll

[ Pregleda: 1965 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.