2016-04-11 27 views
0

Ich frage mich, ob, nachdem die FutureTask seinen Job beendet und ich das Ergebnis daraus erfolgreich erhalten kann, sollte ich die FutureTask aufräumen, um die Ressource freizugeben? Oder die FutureTask wird automatisch nach einer bestimmten Zeit nach Beendigung des Jobs bereinigt?FutureTask nach der Verwendung bereinigen

Vielen Dank.

+1

Das hängt wahrscheinlich davon ab, was das Ergebnis der Aufgabe ist. Wenn es ein Pojo ist, dann werden Sie wahrscheinlich alle Referenzen, die Sie halten, fallen lassen, damit GC seine Arbeit wie mit anderen Pojos macht. Wenn die Zukunft einen Verweis auf eine schließbare Ressource wie einen Stream enthält, müssen Sie sie schließen - oder überlegen, warum die Zukunft überhaupt eine solche Ressource enthält. – Thomas

Antwort

2


Die FutureTask ist irgendwie unveränderlich. Sobald der Wert und der Status festgelegt wurden, können sie nicht mehr geändert werden. Abgesehen davon ist die FutureTask wie jedes andere Java-Objekt, so dass Sie nichts tun müssen. Es ist für GC berechtigt, sobald es keine weiteren Hinweise darauf gibt. Das heißt, es wird GCed, sobald es den Gültigkeitsbereich verlässt, oder wenn Sie darauf bestehen, dass Sie den Verweis entfernen können, indem Sie ihm Null zuweisen. Wenn Sie Ihren Code gut geschrieben haben, sollten Sie NULL nicht auf eine Referenz setzen - jedes Objekt sollte im kleinstmöglichen Umfang leben.