Just going through the CompletableFuture documentation and stumbled upon the completeExceptionally and obtrudeException methods and is having a hard time comprehending the difference and use case. Can the community help understand the difference and the use case with an example?
Difference between completeExceptionally and obtrudeException
4.1k Views Asked by RBz At
2
There are 2 best solutions below
0
lkatiforis
On
completeExceptionally:
completableFuture.completeExceptionally(
new RuntimeException("Calculation failed!"));
//..
completableFuture.get(); //exception will be thrown whether `completableFuture` was not already completed.
obtrudeException:
completableFuture.obtrudeException(
new RuntimeException("Calculation failed!"));
//..
completableFuture.get(); //exception will be thrown **whether or not** `completableFuture` was completed.
Related Questions in JAVA
- I need the BIRT.war that is compatible with Java 17 and Tomcat 10
- Creating global Class holder
- No method found for class java.lang.String in Kafka
- Issue edit a jtable with a pictures
- getting error when trying to launch kotlin jar file that use supabase "java.lang.NoClassDefFoundError"
- Does the && (logical AND) operator have a higher precedence than || (logical OR) operator in Java?
- Mixed color rendering in a JTable
- HTTPS configuration in Spring Boot, server returning timeout
- How to use Layout to create textfields which dont increase in size?
- Function for making the code wait in javafx
- How to create beans of the same class for multiple template parameters in Spring
- How could you print a specific String from an array with the values of an array from a double array on the same line, using iteration to print all?
- org.telegram.telegrambots.meta.exceptions.TelegramApiException: Bot token and username can't be empty
- Accessing Secret Variables in Classic Pipelines through Java app in Azure DevOps
- Postgres && statement Error in Mybatis Mapper?
Related Questions in MULTITHREADING
- How can I outsource worker processes within a for loop?
- OpenMP & oneTbb difference
- Receiving Notifications for Individual Task Completion OmniThreadLibrary Parallel.ForEach
- C++ error: no matching member function for call to 'enqueue' futures.emplace_back(TP.enqueue(sum_plus_one, x, &M));
- How can I create a thread in Haskell that will restart if it gets killed due to any reason?
- Qt: running callback in the main thread from the worker thread
- Using `static` on a AVX2 counter function increases performance ~10x in MT environment without any change in Compiler optimizations
- Heap sort with multithreading
- windows multithreading CreateMutex
- The problem of "fine-grained locks and two-phase locking algorithm"
- OpenMP multi-threading not working if OpenMPI set to use one or two MPI processor
- WPF Windows Initializing is locking the separated thread in .Net 8
- TCP Client Losing Connection When Writing Data
- vc++ thread constructor throwing compiler error c2672
- ASP.NET Core 6 Web API : best way to pause before resending email
Related Questions in ASYNCHRONOUS
- Callback and Microtask Queue of Java Script
- Occasional crash at NSURLSessionDataTask dataTaskWithRequest:completionHandler:
- Musical chairs: How can an asynchronous task cancel a synchronous one in c#?
- Asynchronously add to queue, synchronously process it
- Sending asynchronous requests without a pre-defined task list
- Value of a variable remains unaltered when assigned during a loop
- How to efficiently test some HTTP proxies for accessing a specific domain?
- How do you update Celery Task State/Status to see it in Flower?
- Why use tasks and async await in C# inline?
- NEXTJS14 DRIZZLE : Async issue when trying to post data from component into DB
- Blocking wait on future OUTSIDE of async functions
- save to csv simultaneously opcua datachange notification
- How can I load data from secrets-manager synchronously in TypeScript
- How to avoid timeout of API before ending?
- Conditional Synchronous Import in JavaScript, to export a simple object and not promise, possible?
Related Questions in COMPLETABLE-FUTURE
- CompletableFuture: thenAccept called but whenComplete is not
- Java8 CompletableFuture.get(long timeout, TimeUnit unit) doesn't return in time
- How can I find the Custom Exception class in CompletionException?
- Optimal way to pass parameters into Supplier e.g. for CompletableFuture?
- Unable to call static method supplyAsync of class CompletableFuture on object of the same class! CompletableFuture c=new CompletableFutre; c fails
- CompletableFuture.whenComplete is not called for some Requests even after invoking the complete method
- CompletableFuture Transaction rollback
- CompletableFuture's sometimes use wrong response from downstream service
- ThreadLocal context lost with CompletableFuture in Java
- Yielding control in Java asynchronous code
- Can I submit to the same Single Thread Executor multiple times?
- Set timeout per call with CompletableFuture chain?
- How to combine the result of execution of two CompletableFutures?
- Completable Future Suggestion needed
- Best practice for catching exceptions in CompletableFutures
Related Questions in COMPLETION-STAGE
- Do a CompletionStage inside a CompletionStage
- Quarkus rest client(w/o CompletionStage): calling 2 endpoints in order, how to define return type to have better performance
- How to troubleshoot a CompletionStage?
- What can I use as Replacement for ResultSetFuture in Cassandra 4.x?
- Java CompletionStage not propagating exception to exceptionally
- How to force CompletableFuture.thenApply() to run on the same thread that ran the previous stage?
- Difference between completeExceptionally and obtrudeException
- How do I unit test whenCompleteAsync on a lambda with a http request?
- CompletedStage.completedFuture VS CompletedStage.completedStage
- How to nest CompleteFuture timeouts
- Resilience4j retry with CompletionStage
- Dispatch a CompletionStage / CompletableFuture API service in a Reactive REST GET endpoint with Quarkus/Mutiny
- Why thenCombine result doesn't complete exceptionally if returning a failed stage?
- How to combine Source.repeat and Source.completionStage using Akka
- How to write while loop with completionStage which eventually returns CompletionStage without join?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Explanation
The difference is subtle but important. From the official documentation:
completeExceptionallyobtrudeExceptionSo they differ in their behavior regarding
CompletableFutures that are already completed.Basically, a future can either be completed or still pending (not completed). When you call
completeExceptionallyorobtrudeException, the behavior differs depending on the state of the future at that point in time.Already completed future
Consider this example where the future is already completed at the moment of calling the method:
versus
Not completed future
And in case the future is not completed yet, they will both throw an exception:
and
completeandobtrudeValueLikewise there are also the methods
completeandobtrudeValuewhich behave in the same way, but instead of throwing an exception, you can supply a value instead.So
completebasically completes the future with the given value, in case the future is not done yet, otherwise it does not do anything.While
obtrudeValuewill supply the given value regardless, so it resets or cancels whatever the future already computed and replaces it by the given value instead.