Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java 9 CompletableFuture API: Timeouts, Subclassing & neue Factory-Methoden

Überblick

CompletableFuture<T> (Java 8) repräsentiert einen asynchronen Berechnungswert. Java 9 fügt drei wichtige Erweiterungen hinzu:

  1. Unterstützung für Delays & Timeouts.
  2. Verbessertes Subclassing.
  3. Neue Factory-Methoden.

1. Delays & Timeouts

completeOnTimeout(T value, long timeout, TimeUnit unit)

Vervollständigt den Future erfolgreich mit value, falls er nicht vorher abgeschlossen wird (innerhalb von timeout).

CompletableFuture<String> future = longRunningTask()
    .completeOnTimeout("Fallback-Wert", 5, TimeUnit.SECONDS);

orTimeout(long timeout, TimeUnit unit)

Vervollständigt den Future exceptionally mit TimeoutException, falls nicht vorher abgeschlossen.

CompletableFuture<String> future = longRunningTask()
    .orTimeout(5, TimeUnit.SECONDS); // wirft TimeoutException bei Timeout

Unterschied: completeOnTimeout = Erfolg mit Fallback; orTimeout = Fehler bei Timeout.

2. Verbessertes Subclassing

Java 8 machte Subclassing schwer, da interne Factory-Methoden CompletableFuture Instanzen erzeugten.

Neue geschützte Methoden

// Standard-Executor für async-Operationen ohne expliziten Executor
public Executor defaultExecutor() { return ForkJoinPool.commonPool(); }

// Factory für neue inkomplette Futures desselben Subtyps
public <U> CompletableFuture<U> newIncompleteFuture() {
    return new CompletableFuture<>(); // Subklassen sollten überschreiben
}

Best Practice für Subklassen:

public class MyFuture<T> extends CompletableFuture<T> {
    @Override
    public Executor defaultExecutor() {
        return myCustomExecutor; // z. B. dedizierter Thread-Pool
    }

    @Override
    public <U> MyFuture<U> newIncompleteFuture() {
        return new MyFuture<>();
    }
}

3. Neue statische Factory-Methoden

Methode Rückgabe Beschreibung
completedFuture(U value) CompletableFuture<U> Bereits erfolgreich abgeschlossener Future.
completedStage(U value) CompletionStage<U> Bereits erfolgreich abgeschlossene Stage (nur Interface-Methoden).
failedStage(Throwable ex) CompletionStage<U> Bereits fehlgeschlagene Stage mit Exception.

Beispiele

// Sofort fertiger Future
CompletableFuture<String> ready = CompletableFuture.completedFuture("Fertig!");

// Für APIs, die nur CompletionStage erwarten
CompletionStage<Integer> stage = CompletableFuture.completedStage(42);

// Fehler-State erzeugen
CompletionStage<String> failed = CompletableFuture.failedStage(
    new IllegalStateException("Geplant fehlgeschlagen")
);

Zusammenfassung der Neuerungen

Feature Methode(n) Nutzen
Timeouts completeOnTimeout, orTimeout Reaktive Systeme, Circuit Breaker, Fallback-Strategien
Subclassing defaultExecutor, newIncompleteFuture Eigene Future-Typen mit custom Executor/Behavior
Factories completedFuture, completedStage, failedStage Test-Doubles, Pre-computed Values, Error-Stubs

Fazit

Java 9 macht CompletableFuture produktionsreifer für resiliente, timeout-basierte Architekturen und ermöglicht saubere Erweiterung via Vererbung.

Java

  1. Sechs Schlüsselinnovationen steigern die Leistung kryptografischer Hardware
  2. Robuste Temperatur- & Sensor-API auf Raspberry Pi mit GY-91 Modul bauen
  3. Blueprint zur Steigerung der Anlagenzuverlässigkeit: Strukturierter 5-Schritte-Plan
  4. Allegheny Power investiert 156 Mio. $ in Zuverlässigkeits-Upgrades in West Virginia
  5. CMMS-Funktionalität mit robuster API erweitern
  6. Java 9 (JDK 9): Wichtigste Features & Vorteile – Modularität, JShell, HTTP/2 & mehr
  7. Java 9 Process API Verbesserungen: ProcessHandle, Info & asynchrone Events
  8. Java 9 Stream API Erweiterungen: takeWhile, dropWhile, iterate & ofNullable
  9. Java 9 Optional Erweiterungen: stream(), ifPresentOrElse() & or()
  10. Java 9 Multi-Resolution Image API: Responsive Grafiken mit mehreren Auflösungen