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, dieser Ansatz von mir ist gültig, denn wenn die InterruptedException ausgelöst wird, muss das Interrupted-Flag in meinem Thread gesetzt werden.
Aber jetzt frage ich mich, ob ich join() – das keine InterruptedException auslöst – anstelle von get() verwenden kann, ohne den Interrupt zu verschlucken (wodurch die Informationen über den Interrupt verloren gehen). Ich würde es gerne so verwenden (zum Beispiel):

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 wird, sodass die Informationen über den Interrupt nicht verloren gehen, 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