Class TimeoutManager

java.lang.Object
de.bsvrz.ars.ars.mgmt.tasks.base.TimeoutManager

public class TimeoutManager extends Object
Hilfsklasse, die dabei hilft, bestimmte Aktionen mit Timeout auszuführen. Es geht hier insbesondere darum, Blockierung zu vermeiden, wenn die Nachforderung von Archivdaten beim Warten auf Antworten des anderen Archivsystem hängenbleibt.
  • Field Details

    • STANDARD_TIMEOUT

      public static final long STANDARD_TIMEOUT
      Standard-Timeout im Archivsystem
      See Also:
  • Constructor Details

    • TimeoutManager

      public TimeoutManager()
  • Method Details

    • callWithTimeout

      public static <T> T callWithTimeout(TimeoutFunction<T> func) throws TimeoutException, InterruptedException
      Führt den angegebenen Lambda-Ausdruck mit einem Timeout aus. Der Timeout ist STANDARD_TIMEOUT.

      Wenn der Timeout abläuft und die Funktion sich nicht nicht beendet hat, wird der Thread, der die Funktion ausführt (dies ist der gleiche Thread, auf dem diese Funktion aufgerufen wird), mit Thread.interrupt() unterbrochen. Das heißt, mit dem TimeoutManager können nur Funktionen mit einem Timeout versehen werden, die sauber auf Interrupts reagieren und nicht z. B. in Endlosschleifen festhängen.

      Type Parameters:
      T - Ergebnis-Typ
      Parameters:
      func - Funktion, die ausgeführt wird. Der Funktion wird als Parameter ein TimeoutCallback übergeben, über den mit TimeoutCallback.tick() der Timeout verlängert werden kann.
      Returns:
      Ergebnis der übergebenen Funktion
      Throws:
      TimeoutException - Wenn der Timeout abgelaufen ist.
      InterruptedException - Wenn dieser Thread unterbrochen wurde, bevor der Timeout abgelaufen ist
    • callWithTimeout

      public static <T> T callWithTimeout(TimeoutFunction<T> func, long timeoutMillis) throws TimeoutException, InterruptedException
      Führt den angegebenen Lambda-Ausdruck mit einem Timeout aus.

      Wenn der Timeout abläuft und die Funktion sich nicht nicht beendet hat, wird der Thread, der die Funktion ausführt (dies ist der gleiche Thread, auf dem diese Funktion aufgerufen wird), mit Thread.interrupt() unterbrochen. Das heißt, mit dem TimeoutManager können nur Funktionen mit einem Timeout versehen werden, die sauber auf Interrupts reagieren und nicht z. B. in Endlosschleifen festhängen.

      Type Parameters:
      T - Ergebnis-Typ
      Parameters:
      func - Funktion, die ausgeführt wird. Der Funktion wird als Parameter ein TimeoutCallback übergeben, über den mit TimeoutCallback.tick() der Timeout verlängert werden kann.
      timeoutMillis - Timeout in Millisekunden
      Returns:
      Ergebnis der übergebenen Funktion
      Throws:
      TimeoutException - Wenn der Timeout abgelaufen ist.
      InterruptedException - Wenn dieser Thread unterbrochen wurde, bevor der Timeout abgelaufen ist