2016-06-17 15 views

Antwort

2

DeferredResult ist eine Alternative zu Callable, mit der Sie ein Ergebnis erzielen können. Sie können DeferredResult auch so erweitern, dass zusätzliche Daten oder Verhaltensweisen zugeordnet werden, falls Sie später auf einige Daten zugreifen müssen, ohne dass zusätzliche Datenstrukturen erforderlich sind. Aber das war es schon. ListenableFuture Future ist nützlich, wenn Sie Callbacks zu der asynchronen Task hinzufügen müssen. Guajavs ListenableFuture erlaubt tatsächlich die Komposition, die ich von Spring ListenableFuture nicht sehen kann. Dafür verwenden Sie lieber CompletableFuture, die auch von Spring unterstützt wird. Sie können Futures komponieren sehr einfach, check this out: http://www.deadcoderising.com/java8-writing-asynchronous-code-with-completablefuture/

1

Sie sich vom Konzept her ähnlich sind und austauschbar als Controller-Methode Ergebnis verwendet werden, dank ListenableFutureReturnValueHandler, dass der zweite an den ersten anpasst.

jedoch beide DeferredResult Klasse und ListenableFuture Schnittstelle aus zwei verschiedenen Welten kommen:

  1. Erste aus org.springframework.web.context.request.async Paket hinzugefügt in der Version 3.2.
  2. Sekunde von org.springframework.util.concurrent Paket verfügbar seit 4.0.

Darüber hinaus wurden sie für verschiedene Bedürfnisse hinzugefügt. Während der erste eine Basis- und vollständige Funktionalität für das asynchrone Bereitstellen des Controller-Ergebnisses bietet, ermöglicht der zweite zusätzlich, Ihre Implementierung mit bereits vorhandenen Klassen/Frameworks zu überbrücken, wie zum Beispiel ExecutorService Framework (siehe ListenableFutureTask).

Unterm Strich also, verwenden Sie die DeferredResult Klasse, wenn es genug ist für Sie die weitere Verarbeitung zu implementieren, auf eigene Faust oderListenableFuture, wenn Sie möchten, dass ExecutorService -ähnlichen Frameworks verwenden.

Verwandte Themen