Ich bin gerade dabei einen Server zu programmieren, und möchte dazu in einem Thread eine Listen Methode laufen lassen, und gleichzeitig in einem anderen Thread eine andere Methode, die die User checken soll.
Ich habe den Code hierfür teilweise aus einem Tutorial und diesen erweitert. Wenn ich nur einen Thread starte, funktioniert dieser(in diesem Fall für die listen() Methode). Wenn ich den 2. Thread dazu starte wird die listen() Methode nur einmal aufgerufen und dann läuft der 2. Thread weiter. Ich möchte aber beide gleichzeitig laufen lassen. Was mache ich falsch?
Hier ist mein Code bis jetzt:
Ich habe den Code hierfür teilweise aus einem Tutorial und diesen erweitert. Wenn ich nur einen Thread starte, funktioniert dieser(in diesem Fall für die listen() Methode). Wenn ich den 2. Thread dazu starte wird die listen() Methode nur einmal aufgerufen und dann läuft der 2. Thread weiter. Ich möchte aber beide gleichzeitig laufen lassen. Was mache ich falsch?
Hier ist mein Code bis jetzt:
Java:
public void start() {
try {
socket = new DatagramSocket(port);
System.out.println("Socket started..");
} catch (SocketException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
return;
}
listen = true;
listenThread = new Thread(() -> listen());
listenThread.start();
checkUserData = true;
userDataThread = new Thread(() -> checkUserData());
userDataThread.start();
}
public void listen() {
while(listen) {
System.out.println("Lisening");
DatagramPacket message = new DatagramPacket(recvBuffer, recvBuffer.length);
try {
socket.receive(message);
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
process(message);
}
}
private void checkUserData() {
while(checkUserData) {
System.out.println("Checking ");
for(int i=0;i<serverClients.size();i++) {
System.out.println(serverClients.get(i).getUsername() + ":"+serverClients.get(i).getX()+"-"+serverClients.get(i).getY());
if(serverClients.get(i).getLastAction() < System.currentTimeMillis() - TIMEOUT) {
removeServerClient(serverClients.get(i));
}
}
}
}
Code:
Die Ausgabe in der Console sieht wie folgt aus:
Socket started..
Lisening
Checking
Checking
Checking
Checking
Checking
Checking
Checking
Checking
usw...