[ amel @ 09.07.2009. 21:00 ] @
Evo jedan zadatak iz Thread oblasti.

Neka cudna masina uvecava svoj unutrasnji counter za jedan pri pozivu metode tick(). Metodom getTicks() se moze provjeriti trenutno stanje countera u masini. Ova masina takodje sadrzi jedno veliko crveno dugme. Pri pozivu metode waitForBigRedButton() masina ceka na pritisak na crveno dugme. Znaci pritiskom na to dugme se izlazi iz te metode. Konkretna implementacija te masine ovdje ne igra nikakvu ulogu. Implementira jedan Interface

Code:

interface Scwbrb {      // Strange counter with big red button
   void tick();         // increment inner counter
   int getTicks()       // read counter state
   void waitForBigRedButton();
}


Implementiraj metodu stress koja provjerava Scwbrb. U jednoj petlji se citavo vreijeme pozivati metoda tick() dok neko ne pritisne crveno dugme. Pritiskom na dugme ce vrijednost masine biti vracena ka rezultat metode.

Code:

int stress(final Scwbrb s) {
   ...
}


Moje rijesenje:

Code:

public int stress(final Scwbrb s) {
        
    new Thread() {
        public void run() {
            while (true)
                s.tick();
        }
    }.start();

    new Thread() {
        public void run() {
            while(true) {
                s.waitForBigRedButton();
            }
        }
    }.start();
    return s.getTicks();
}


Posto konkretna implementacija ove masine nije data, volio bih da mi neko provjeri tacnost, barem sa teoretskog aspekta. Hvala
[ Dejan Lozanovic @ 11.07.2009. 11:03 ] @
Ako sam ja dobro razumeo zadatak, to mora ovako da se uradi; jer onaj drugi tread koji si napravio bude blokiran sve vreme. i kad neko pritisne bigred button u tom trenutku ce ti se vratiti s.waitForBigRedButton(), nakon toga ocitas stanje.

Code:

public int stress(final Scwbrb s) {
        
    new Thread() {
        public void run() {
            while (true)
                s.tick();
        }
    }.start();

    s.waitForBigRedButton();
    return s.getTicks();
}