CompletableFutures, join() und get() vs. Thread-UnterbrechungJava

Java-Forum
Anonymous
 CompletableFutures, join() und get() vs. Thread-Unterbrechung

Post by Anonymous »

In meinem Code (Java 17) bin ich es gewohnt, Ausnahmen von kombinierten CompletableFutures mit get() wie folgt zu behandeln:

Code: Select all

try {
CompletableFuture.allOf(someFuture, someOtherFuture).get();
} catch (InterruptedException | ExecutionException ex) {
Thread.currentThread().interrupt();

if (ex.getCause() instanceof CustomException customException) {
throw customException;
}

throw new CustomException(CustomErrorCodeEnum.UNEXPECTED_ERROR, ex.getCause().getMessage());
}
Der Teil, zu dem ich eine Frage habe, ist Thread.currentThread().interrupt();. Ich denke, dass mein Ansatz gültig ist, da beim Auslösen der InterruptedException das Interrupted-Flag in meinem Thread gesetzt werden muss.
Aber jetzt frage ich mich, ob ich join() (das keine InterruptedException auslöst) anstelle von get() verwenden kann, ohne den Interrupt zu verschlucken (und die Informationen über den Interrupt zu verlieren). Ich möchte es z.B. nutzen. so:

Code: Select all

try {
CompletableFuture.allOf(someFuture, someOtherFuture).join();
} catch (CompletionException | CancellationException ex) {
if (ex.getCause() instanceof CustomException customException) {
throw customException;
}

throw new CustomException(CustomErrorCodeEnum.UNEXPECTED_ERROR, ex.getCause().getMessage());
}
Ich habe die Implementierung der Methoden „join()“ und „get()“ gelesen und es scheint mir, dass in der Methode „join()“ Thread.currentThread().interrupt(); bereits aufgerufen, damit man die Informationen über den Interrupt nicht verliert, aber ich bin mir nicht 100 % sicher, daher lautet meine Frage: Ist es sicher, die Variante „join()“ zu verwenden? Verliere ich nicht einige Informationen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post