Ich schreibe gerade ein kleines Java-Programm, wo ich einen Client habe, der Befehle an einen Server sendet. Ein separater Thread beschäftigt sich mit Antworten von diesem Server (die Antwort ist normalerweise ziemlich schnell). Idealerweise pausiere ich den Thread, der die Serveranfrage gestellt hat, bis die Antwort empfangen wird oder bis ein Zeitlimit überschritten wird.Wie man einen Thread auf eine Serverantwort warten lässt
Meine aktuelle Lösung sieht wie folgt aus:
public void waitForResponse(){
thisThread = Thread.currentThread();
try {
thisThread.sleep(10000);
//This should not happen.
System.exit(1);
}
catch (InterruptedException e){
//continue with the main programm
}
}
public void notifyOKCommandReceived() {
if(thisThread != null){
thisThread.interrupt();
}
}
Das Hauptproblem ist: Dieser Code führt eine Ausnahme aus, wenn alles, wie es sollte sich geht, und endet, wenn etwas Schlimmes passiert. Was ist ein guter Weg, um das zu beheben?
Mehrere Lösungen sind in diesem Thread zur Verfügung: http://stackoverflow.com/questions/289434/ how-to-make-a-java-thread-wait-for-another-threads-output? rq = 1 –
Wenn der Thread, der die Nachricht sendet, auf die Antwort warten muss, warum warten Sie auf die Antwort in einem anderen Thread ? Mach es im selben Thread, da musst du sowieso warten. Ein Thread ist nutzlos, wenn er nur zum Schlafen verwendet wird. Wie auch immer, welche Ausnahme wirft es? – RealSkeptic
Es ist mehr oder weniger dasselbe wie in [Wie man einen POST-REST-Aufruf asynchron in Java durchführt] (http://stackoverflow.com/questions/43268903/how-to-make-a-post-rest-call-asynchronous) -in-Java). Ersetzen Sie den HTTP-Teil durch Ihren Remote-Aufruf. – andih