andy72
Erfahrenes Mitglied
Habe ein Problem:
eine while-schleife läuft als thread, in dem ein Client-Socket eine Verbindung aufrecht erhält. Ein Java-Timer mit einem TimerTask sendet über diesen alle 60 Sekunden einen Ping an einen Server, da dieser sonst die Verbindung abbricht (wäre nicht sogut, da der Client-Socket ein Messenger ist). Wie kann ich nun bei kritischen Daten, die unverzüglich gesendet werden müssen, den Task anhalten und darauf neu starten ? Der Timer läuft Java-Intern selbst als Thread - ein Timer.wait() geht nicht, da ich den Timer-Thread nicht verwalten darf (Exception wird dann ausgelöst). Ein Timer.cancel() geht auch nicht, da innerhalb der while-schleife eine weitere Exception ausgelöst wird, wo es dann heisst, der Task sei längst beendet.
Bin für jede Idee dankbar, anbei noch der Code dazu:
eine while-schleife läuft als thread, in dem ein Client-Socket eine Verbindung aufrecht erhält. Ein Java-Timer mit einem TimerTask sendet über diesen alle 60 Sekunden einen Ping an einen Server, da dieser sonst die Verbindung abbricht (wäre nicht sogut, da der Client-Socket ein Messenger ist). Wie kann ich nun bei kritischen Daten, die unverzüglich gesendet werden müssen, den Task anhalten und darauf neu starten ? Der Timer läuft Java-Intern selbst als Thread - ein Timer.wait() geht nicht, da ich den Timer-Thread nicht verwalten darf (Exception wird dann ausgelöst). Ein Timer.cancel() geht auch nicht, da innerhalb der while-schleife eine weitere Exception ausgelöst wird, wo es dann heisst, der Task sei längst beendet.
Bin für jede Idee dankbar, anbei noch der Code dazu:
Code:
public MyTimerTask extends TimerTask {
public void run() {
out.write(PING_DATA);
}
}
Timer t = new Timer();
t.schedule(new MyTimerTask(), 5000, 60000);
String buffer = null;
boolean stop = true;
while(stop) {
if( in.readLine() != null ) {
out.write(critical_data); // Sendet zeitweise nicht, da der TimerTask gerade sendet
}
}