Tôi đã cố gắng hết sức nhưng không tìm thấy bất kỳ bài viết hoặc blog nào so sánh rõ ràng "listenablefuture" và "completablefuture", và cung cấp một phân tích tốt như nhau. Vì vậy, nếu bất cứ ai có thể giải thích hoặc chỉ cho tôi một blog hoặc bài viết như vậy, nó sẽ thực sự tốt cho tôi. Cảm ơnListenablefuture vs Completablefuture
17
A
Trả lời
17
Cả ListenableFuture và CompletableFuture có lợi thế so với lớp cha mẹ Tương lai bằng cách cho phép người gọi "đăng ký" theo cách này hay cách khác gọi lại khi hành động không đồng bộ được hoàn thành.
Với Future bạn có thể làm điều này:
ExecutorService executor = ...;
Future f = executor.submit(...);
f.get();
f.get() khối cho đến khi hành động async được hoàn thành;
Với ListenableFuture bạn có thể đăng ký một callback như thế này:
ListenableFuture listenable = service.submit(...);
Futures.addCallback(listenable, new FutureCallback<Object>() {
@Override
public void onSuccess(Object o) {
//handle on success
}
@Override
public void onFailure(Throwable throwable) {
//handle on failure
}
})
Với CompletableFuture bạn cũng có thể đăng ký một callback khi nhiệm vụ hoàn tất, nhưng nó là khác nhau từ ListenableFuture ở chỗ nó có thể được hoàn thành từ bất kỳ chủ đề nào muốn hoàn thành.
CompletableFuture completableFuture = new CompletableFuture();
completableFuture.whenComplete(new BiConsumer() {
@Override
public void accept(Object o, Object o2) {
//handle complete
}
}); // complete the task
completableFuture.complete(new Object())
Khi một chuỗi gọi hoàn thành nhiệm vụ, giá trị nhận được từ cuộc gọi đến get() được đặt bằng giá trị tham số nếu tác vụ chưa hoàn tất.
Các vấn đề liên quan
- 1. ForkJoinTask vs CompletableFuture
- 2. ListenableFuture, FutureCallback và timeouts
- 3. ListenableFuture to scala Future
- 4. CompletableFuture supplyAsync
- 5. CompletableFuture from Callable?
- 6. Ném ngoại lệ từ CompletableFuture
- 7. CompletableFuture, supplyAsync() và sau đóApply()
- 8. Scala Futures và java 8 CompletableFuture
- 9. Sự khác biệt giữa CompletableFuture, Future và RxJava's Observable
- 10. CompletableFuture/parallelStream trong máy chủ ứng dụng JavaEE
- 11. cách chuyển đổi java Future <V> sang ổi ListenableFuture <V>
- 12. Java 8 Hoàn toànFuture vs Netty Future
- 13. Tại sao CompletableFuture.allOf được khai báo là CompletableFuture <Void>?
- 14. Trả lại hoàn tấtFuture <Void> hoặc CompletableFuture <?>?
- 15. CompletableFuture # whenComplete không được gọi nếu sau đóApply được sử dụng
- 16. Thứ tự trong đó nhiều khối Chấp nhận là của một CompletableFuture được thực hiện
- 17. J2ME VS Android VS iPhone VS Symbian VS Windows CE
- 18. Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd
- 19. bigtable vs cassandra vs simpledb vs dynamo vs couchdb vs hypertable vs riak vs hbase, họ có điểm gì chung?
- 20. ACE vs Boost vs Poco vs wxWidgets
- 21. NetSqlAzMan vs AzMan vs (?????)
- 22. & vs * và | vs +
- 23. * vs ** vs *** trong Proguard?
- 24. Mathematica: Unevaluated vs Defer vs Hold vs HoldForm vs HoldAllComplete vs etc etc
- 25. ember.js + tay lái: render vs outlet vs vs vs vs control
- 26. innerText vs innerHtml vs nhãn vs văn bản vs textContent vs outerText
- 27. Tại sao Java 8 CompletableFuture rồiSửa đổi tạo ra ngoại lệ khác nhau tùy thuộc vào thứ tự hoàn thành?
- 28. Tôi làm cách nào để có được một CompletableFuture <T> từ yêu cầu Async Http Client?
- 29. Htmlentities vs addslashes vs mysqli_real_escape_string
- 30. Delegate.CreateDelegate vs DynamicMethod vs Biểu
Nói cách khác ... ListenableFuture là cũng nghĩ ra giao diện sạch sẽ, trong khi CompletableFuture (và giao diện CompletionStage vì nó cho thấy 'toCompletableFuture') là nguy hiểm bởi vì nó cho thấy' phương pháp complete'. Tuy nhiên, một ví dụ khác về rác thải không được suy nghĩ rất tốt mà chúng tôi mong đợi từ Oracle. –
'CompletionStage' sẽ tốt nếu nó mở rộng' Tương lai' và không hiển thị 'toCompletableFuture'. Và sau đó họ có thể đặt tên cho nó một cái gì đó có ý nghĩa, như "ChainableFuture". –
'Tương lai' và' ListenableFuture' là các giao diện trong khi 'CompletableFuture' là một lớp thực hiện' Tương lai ' – cozyconemotel