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

sinhronizacija niti

[es] :: Java :: sinhronizacija niti

[ Pregleda: 3963 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

maxmagnus2
none
VA

Član broj: 3893
Poruke: 194
89.216.238.*



Profil

icon sinhronizacija niti19.07.2007. u 14:59 - pre 203 meseci
Poz,
napravio sam 3 klase:
1.klasa Banka sa int stanjem koji bi niti trebale da menjaju
2.klasa Korisnik koja je nit i koja treba da menja Banka.stanje preko odgovarajuceg
sinhronizovanog metoda. Korisnik ima 2 instance koje bi trebale da rade naizmenicno
(naizmenicno u smislu pvo jedna pa druga)
Ovo se ne desava iz meni nepoznatog razloga....
3. sluzi za pokretanje
kod:
Code:

public class Banka {
    int stanje=0;
    
    public synchronized void ulaganje(String za_ispis,int ulog){
        stanje=stanje+ulog;
        System.out.println(za_ispis+" "+stanje);    
    } //ulaganje_podizanje
}
*********************************************
public class Korisnik extends Thread{
    String ime;
    Banka B;
    int ulog;
    public Korisnik(String ime,Banka B,int ulog){
        this.B=B;
        this.ime=ime;    
        this.ulog=ulog;
    }//konstruktor
    public void run(){
        for(int i=0;i<10;i++)
            B.ulaganje(ime, ulog);        
    }//run
}
***********************************************

public class radna {
    public static void main(String[] args){ 
        Banka B=new Banka();
        Korisnik k1=new Korisnik("kor1**",B,10);
        Korisnik k2=new Korisnik("kor2",B,-10);
        k1.setPriority(Thread.MIN_PRIORITY);
        k2.setPriority(Thread.MAX_PRIORITY);
        k1.start();
        k2.start();
    }//main
}//class

Gde je greska tj kako da mi niti rade naizmenicno.
Nije htelo da radi ni pre nego sto sam dodelio prioritete a ni posto sam pokusao da tako resim problem....

[Ovu poruku je menjao maxmagnus2 dana 19.07.2007. u 16:25 GMT+1]
The sleeper has awaken
 
Odgovor na temu

bgd2500

Član broj: 55912
Poruke: 226
*.finsoft.co.yu.



+7 Profil

icon Re: sinhronizacija niti19.07.2007. u 16:42 - pre 203 meseci
Daj mu malo da dise.
Code:

public void run(){
  try {
    for(int i=0;i<10;i++) {
      B.ulaganje(ime, ulog);        
    }
    Thread.sleep(100);
  } catch (InterruptedException e) {
  }
}//run
 
Odgovor na temu

Black
Belgrade

Član broj: 4199
Poruke: 71
82.117.206.*



Profil

icon Re: sinhronizacija niti19.07.2007. u 16:59 - pre 203 meseci
A kako se ta greska manifestuje?
 
Odgovor na temu

maxmagnus2
none
VA

Član broj: 3893
Poruke: 194
89.216.238.*



Profil

icon Re: sinhronizacija niti19.07.2007. u 17:40 - pre 203 meseci
Mislim da bi ukoliko ovako postvim prioritete
trebala prvo da se izvsi sve iz niti koja koja ima veci prioritet?
The sleeper has awaken
 
Odgovor na temu

Black
Belgrade

Član broj: 4199
Poruke: 71
82.117.206.*



Profil

icon Re: sinhronizacija niti19.07.2007. u 17:43 - pre 203 meseci
Hm.. ta operacija koju si im ti zadao zahteva vrlo malo vremena, tako da je vrlo moguce da se prvo izvrsi nit koju si prvo pokrenuo, a onda druga, odnosno da se niti paralelno ni ne izvrsavaju, jer se izvrsavaju prakticno trenutno.
 
Odgovor na temu

maxmagnus2
none
VA

Član broj: 3893
Poruke: 194
89.216.238.*



Profil

icon Re: sinhronizacija niti19.07.2007. u 17:50 - pre 203 meseci
Da, u pravu si to se i dogodilo.
The sleeper has awaken
 
Odgovor na temu

rj444
Radomir Jakovljevic
Beograd

Član broj: 48212
Poruke: 354
*.ehv.campus.philips.com.



Profil

icon Re: sinhronizacija niti20.07.2007. u 17:26 - pre 203 meseci
Inace ako zelis da ti niti naizmenicno pristupaju banci, onda ne mozes da se oslonis na ovakav kod koji si napisao.
Moras eksplicitno da sinhronizujes niti da bi ostvario pristup u redosledu u kom zelis.

Sinhronizovane metode u Javi su implamentacija necega sto se zove monitor u teoriji konkurentnog programiranja. Ona ti obezbedjuje samo toliko da ne mogu dve niti da izvrsavaju metodu koja je sinhronizovana.

Da bi postigao to da one naizmenicno prisuptaju banci (ako je to potrebno) moras koristiti neki dodatni mehanizam.

Najjednostavnije je da to uradis pomocu semafora. Pogledaj malo o tome u teoriji konkurentnog programiranja, dokumentaciji Jave (klasa Semaphore)...

A mozes i napisati svoju klasu Semaphore pomocu monitora u Javi.
Code:

public class Semaphore {
    private int val;

    public synchronized void signal() {
        val++;
        if (val==1) notifyAll();
    }


    public synchronized void wait() {
        while (val == 0 ) {
             try { wait(); } catch (InterruptedException e) {}
        }
        val--;
    }

    public void init(int val) { this.val = val; }
}


Pozdrav
 
Odgovor na temu

Mare34
Marko Novakovic
Web Developer
Westum
Belgrade

Član broj: 30613
Poruke: 124
*.dynamic.sbb.co.yu.



Profil

icon Re: sinhronizacija niti01.08.2007. u 01:33 - pre 202 meseci
nije li dovoljno samo dodati metod yield() u while petlji posto scheduler nema sanse da scheduler promeni nit pre zavrsetka jedne iteracije while petlje s obzirom na kratkocu izvrsavanja iste?
 
Odgovor na temu

rj444
Radomir Jakovljevic
Beograd

Član broj: 48212
Poruke: 354
89.98.150.*



Profil

icon Re: sinhronizacija niti01.08.2007. u 07:07 - pre 202 meseci
Nije dobro da tako da razmisljas kada pravis distribuiranu aplikaciju. Sve mora biti egzaktno i ne sme se zasnivati na verovatnoci da ce scheduler ili O.S. stici ili nece stici da nesto urade.
 
Odgovor na temu

Mare34
Marko Novakovic
Web Developer
Westum
Belgrade

Član broj: 30613
Poruke: 124
*.dynamic.sbb.co.yu.



Profil

icon Re: sinhronizacija niti07.08.2007. u 10:17 - pre 202 meseci
onda bi morale sve ostale niti da se blokiraju sem tekuce i da prilikom zavrsetka iteracije blokira trenutnu nit i oslobodi jednu od ranije blokiranih, a to bi moglo veoma lako da se uradi sa semaforima
 
Odgovor na temu

rj444
Radomir Jakovljevic
Beograd

Član broj: 48212
Poruke: 354
89.98.150.*



Profil

icon Re: sinhronizacija niti09.08.2007. u 21:47 - pre 202 meseci
Ovo gore sto sam napisao i jeste semafor.
 
Odgovor na temu

[es] :: Java :: sinhronizacija niti

[ Pregleda: 3963 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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