«« ( Date ) »» // «« ( Thread ) »» // drs - 2007

InterruptedException

by Vanja Petreski
nedelja, 03. jun 2007 - 15:46.

Poceo sam da listam materijale za Javu i uocio sam da svuda gde se catchuje
InterruptedException, imamo prazno telo, ili u najboljem slucaju imamo
System.out.println();

Cisto da kolegama bude jasno da se na ovaj nacin NE pise dobar konkurentan
program, odnosno, nase niti nece moci da zavrse gracefully ako ih neko
prekine (odnosno, nece moci uopste da zavrse).

Evo malog primera, da ja sad ne bih tupio (obratiti paznju na tred 2):

KLASA1:

package interapti;

public class Tred1 extends Thread {

long t;
Tred2 tredZaCancelovanje;

public Tred1(long time, String name, Tred2 tr2) {
t = time;
setName(name);
tredZaCancelovanje = tr2;
}

public void run() {
System.out.println(getName() + ": Radim neki svoj poslic koji traje
" + t / 1000 + " sekundi!");
try {
Thread.sleep(t);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(getName() + ": Cancelujem " +
tredZaCancelovanje.getName());
tredZaCancelovanje.interrupt();
System.out.println(getName() + ": Zavrsavam!");
}

public static void main(String[] args) {
Tred2 tr2 = new Tred2(3000L, "Tred2");
tr2.start();
Tred1 tr1 = new Tred1(3000L, "Tred1", tr2);
tr1.start();
}

}

KLASA2:

package interapti;

public class Tred2 extends Thread {
long t;

public Tred2(long time, String name) {
t = time;
setName(name);
}

public void run() {
int i = 1;
while(!interrupted()) {
System.out.println(getName() + ": Radim neki svoj poslic koji
traje " + t / 1000 + " sekundi " + i++ + ". put!");
try {
Thread.sleep(t);
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt(); // Posto u kodu imamo
sleep (ili wait) koji ispale ex i ociste interapt, mi moramo ponovo da
cancelujemo
// da bi se nit normalno cancelovala. Da ovoga nema, nit bi
nastavila da vrti petlju (probaj) !!!
}
}
System.out.println(getName() + ": Zavrsavam!");
}

}


Pozdrav,
Vanja