U nastavku je dat uprošćen kod na serveru:
public class Server extends Thread {
ServerSocket serverSoket;
Socket soket;
NitKlijenta[] klijenti;
int brojKlijenata;
public void run() {
klijenti = new NitKlijenta[5];
brojKlijenata = 0;
try {
serverSoket = new ServerSocket(8189);
while (true) {
soket = serverSoket.accept();
klijenti[brojKlijenata] = new NitKlijenta(soket, this, brojKlijenata);
klijenti[brojKlijenata].start();
brojKlijenata++;
}
} catch (IOException ex) {
ex.printStackTrace();
} catch(ArrayIndexOutOfBoundsException ex){
ex.printStackTrace();
}
}
}
public class NitKlijenta extends Thread {
Socket soket;
Server server;
int brojKlijenata;
ObjectInputStream inObj;
public NitKlijenta(Socket soket, Server server, int brojKlijenata) {
this.soket = soket;
this.server = server;
this.brojKlijenata = brojKlijenata;
}
public void run() {
try {
while (true) {
inObj = new ObjectInputStream(soket.getInputStream());
TransferObject to = new TransferObject();
to = (TransferObject) inObj.readObject();
server.procesiraj(to);
}
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
server.brojKlijenata--;
return;
}
}
}
NitKlijent, kada počne sa izvršavanjem, zaustavi se na sledećoj liniji koda:
inObj = new ObjectInputStream(soket.getInputStream());
Tu čeka objekat sa klijenta.
Pitanje je sledeće:
Da li je moguće prekinuti jednu od niti (iako je u while petlji i ceka na klijent) na zahtev servera i kako?
Koliko ja znam, potrebno je da nit završi run() metodu da bi se prekinula. Da li je moguće prekinuti i ako nije završila run() metodu?
Unapred hvala!