Hallo!
Ich wollte versuchen, einen Thread "auslaufen" zu lassen, sprich in der run-Methode wird eine Schleife in Abhängigkeit eines Flags durchlaufen. Wenn dieses Flag nicht mehr zutrifft, so müsste die Schleife doch verlassen werden, die run-Methode am Ende ankommen und der Thread sich selbst beenden - oder nicht?
In meiner Main-Methode an anderer Stelle habe ich:
Der Thread wird aber nie beendet.
Ich bin mir übrigens bewusst, dass die client.accept()-Methode blockierend ist und das aufrufen von exitServer so oder so ohne Effekt wäre, solange nicht ein Client connectet und die Blockierung aufhebt, damit die Schleife weiterlaufen kann und das Flag in der Bedingung geprüft wird.
Allerdings kann ich das oben gepostete Programm starten und erst 10 Sekunden später einen Client connecten lassen (wenn das Flag also definitiv auf false ist) - das Programm müsse ja dann nach dem ersten Client abbrechen, mein Client kann sich aber beliebig oft verbinden und bekommt beliebig oft das "Hello World" zurück..
woran könnte das liegen? Vielen Dank!
Ich wollte versuchen, einen Thread "auslaufen" zu lassen, sprich in der run-Methode wird eine Schleife in Abhängigkeit eines Flags durchlaufen. Wenn dieses Flag nicht mehr zutrifft, so müsste die Schleife doch verlassen werden, die run-Methode am Ende ankommen und der Thread sich selbst beenden - oder nicht?
Java:
public class Test implements Runnable {
private int port;
private volatile boolean running;
public Test(int port) {
this.port = port;
this.running = false;
}
@Override
public void run() {
running = true;
ServerSocket server = null;
Socket client = null;
try{
server = new ServerSocket(port);
} catch (IOException e) {
System.out.println("Socketserver could not be created on port " + port + ", System exits");
System.exit(-1);
}
while(running) {
try{
client = server.accept();
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
out.println("Hello Client");
out.close();
} catch (IOException e) {
System.out.println(t.getName() + ": Client accept failed, continue..");
}
}
}
public void exitServer() {
running = false;
}
}
In meiner Main-Methode an anderer Stelle habe ich:
Java:
Test test = new Test(1000);
new Thread(test).start();
test.exitServer();
Der Thread wird aber nie beendet.
Ich bin mir übrigens bewusst, dass die client.accept()-Methode blockierend ist und das aufrufen von exitServer so oder so ohne Effekt wäre, solange nicht ein Client connectet und die Blockierung aufhebt, damit die Schleife weiterlaufen kann und das Flag in der Bedingung geprüft wird.
Allerdings kann ich das oben gepostete Programm starten und erst 10 Sekunden später einen Client connecten lassen (wenn das Flag also definitiv auf false ist) - das Programm müsse ja dann nach dem ersten Client abbrechen, mein Client kann sich aber beliebig oft verbinden und bekommt beliebig oft das "Hello World" zurück..
woran könnte das liegen? Vielen Dank!
Zuletzt bearbeitet: