2012-08-02 20 views
5

Ich habe Oracle Java API aktiviert, die das FutureTask.isDone()Java FutureTask Abschluss Prüfung

einige Informationen gibt, aber ich muss überprüfen, ob die Aufgabe mit jedem Fehler abgeschlossen oder beendet. isDone() -Methode wird zurückgegeben, auch wenn es abgeschlossen/beendet wird. Aber ich muss wissen, ob es aufgrund eines Problems abgeschlossen oder beendet ist.

Antwort

11

Wenn die FutureTask fertig ist, rufen Sie danach get() (kann ohne Zeitüberschreitung sein, sollte es sofort zurückkehren). Es wird entweder einiges Ergebnis zurück oder werfen:

ExecutionException - wenn die Berechnung

ExecutionException.getCause() kehrt die von Ihrer Aufgabe geworfen Ausnahme eine Ausnahme ausgelöst.

+0

Sie können 'get()' aufrufen, auch wenn 'FutureTask' noch nicht erledigt ist; In diesem Fall wartet 'get()' auf den Abschluss. – Pino

0

Warum nicht anrufen FutureTask.get()?

Dies wird das Ergebnis zurückgeben oder eine Ausnahme auslösen, die die ursprünglich geworfene/gefangene Ausnahme enthält. Wenn die Aufgabe nicht abgeschlossen wurde, wird sie blockiert, und Sie haben die Möglichkeit, ein Zeitlimit anzugeben.

würde ich normalerweise erwarten Kunden einfach get() wiederum auf jeder FutureTask rufen einmal erstellt, anstatt isDone() abzufragen.

0

Wenn isDone() true zurückgibt, möchten Sie das Ergebnis erhalten, indem Sie die Methode get() aufrufen, um das Ergebnis der Ausführung zu überprüfen. get() Operation kann ExecutionException werfen, die aus Ursache bestehen, wo Sie ein Problem finden können.

+1

Sie können 'get()' aufrufen, auch wenn 'isDone()' noch falsch ist; In diesem Fall wartet 'get()' auf den Abschluss. – Pino