[ jelenadjor @ 09.10.2011. 13:52 ] @
Zdravo svima,

Pocela sam da ucim niti i naisla sam na sledeci problem.

Program izgleda ovako

package Niti;

public class NT5a extends Thread {
boolean signal;

NT5a(){
signal=true;
start();
}

public void run(){
InterruptKojiPrekidaNeuspavanuNit();
System.out.println("Prekinuta nit.");
}

public void InterruptKojiPrekidaNeuspavanuNit(){
//while(!isInterrupted()&&signal){}
while(!interrupted()&&signal){

}
System.out.println("Status prekida: "+ isInterrupted());
}
public static void main(String[] args)throws Exception{
NT5a nn=new NT5a();
nn.interrupt();
}
}

Prrogram radi dobro, nakon sto se pokrene run metoda niti nn, interrupt metoda prekine while petlju i zavrsi rad metode InterruptKojiPrekidaNeuspavanuNit, a time i rad run metode.

Medjutim, buni me kako radi program u debug modu. Prvo postavim breakpoint na nn.interrupt(); a onda na while(!interrupted()&&signal){ !interrupted()&&signal vraca true, a izadje iz while petlje. Nije mi jasno zasto?

Hvala na pomoci!
[ Deki11 @ 21.10.2011. 14:56 ] @
U debageru (konkretno, u NetBeansu koji koristim) ima spisak pokrenutih niti, i desnim klikom na neku od njih aktivirate je, i onda možete da je korak-po-korak izvršavate, nezavisno od drugih niti.

U ovom konkretnom primeru su 2 tačke prekida u različitim nitima. Kad se zaustavi kod nn.interrupt(), ti onda, umesto da nastaviš. prebaci se na drugu nit (gore opisanim postupkom), pa nju izvršavaj korak po korak, i videćeš da su rezultati sada drugačiji. Ova petlja će se vrteti sve dok se ponovo ne vratiš na prvu nit i dozvoliš da se izvrši nn.interrupt().