Klasse SynchronizationManagerImpl<T>

java.lang.Object
de.bsvrz.ars.ars.mgmt.datatree.synchronization.SynchronizationManagerImpl<T>
Typparameter:
T - Typ, der gelockt wird (in der Regel IdDataIdentification).
Alle implementierten Schnittstellen:
SynchronizationManager<T>

public class SynchronizationManagerImpl<T> extends Object implements SynchronizationManager<T>
Objekt, das Synchronisierungen auf Elemente vom generischen Typ T verwaltet.

Ein Nutzer dieser Klasse kann entweder Lese- oder Schreibzugriff auf ein Element vom Typ T anfordern und erhält dann ein Schlüssel-Objekt. Nach Abschluss der Operation muss das Schlüsselobjekt freigegeben werden, damit weitere Nutzer auf das Element zugreifen können.

Diese Klasse verwaltet alle vergebenen Schlüssel und erlaubt für Debug-Zwecke z. B. die vergebenen Schlüssel auszugeben.

Der konkrete Typ von T sollte equals und hashCode performant und sinnvoll implementieren.

  • Konstruktordetails

    • SynchronizationManagerImpl

      public SynchronizationManagerImpl(Consumer<T> onOpenAction, Consumer<T> onCloseAction)
      Konstruktor.
      Parameter:
      onOpenAction - Aktion, die ausgeführt wird, wann immer (erstmals) auf ein Element synchronisiert wird.
      onCloseAction - Aktion, die jedes mal ausgeführt wird, wenn ein Thread die Synchronisierung auf ein Element komplett aufgibt, also kein Lock mehr vorhanden ist. Das wird hier benutzt, um alle genutzten Indexe freizugeben.
  • Methodendetails

    • acquireWriteKey

      @NotNull public SyncKey<T> acquireWriteKey(T element) throws SynchronizationFailedException
      Beschreibung aus Schnittstelle kopiert: SynchronizationManager
      Fordert exklusiven Zugriff (Schreibzugriff) auf das angegebene Element an. Ein Schreibzugriff darf nur angefordert werden, wenn dieser Thread noch keinen Lesezugriff besitzt. Ansonsten würde dies Deadlocks verursachen. Sollte dieser Thread bereits einen Schreibzugriff besitzen ist das jedoch kein Problem.
      Angegeben von:
      acquireWriteKey in Schnittstelle SynchronizationManager<T>
      Parameter:
      element - Element
      Gibt zurück:
      Schlüssel zum Zugriff auf das Element. Solange der Schlüssel gültig ist, garantiert diese Klasse, kann kein anderer Thread einen anderen Schlüssel auf dieses Element hält.
      Löst aus:
      SynchronizationFailedException - Falls der Schlüssel nicht geholt werden konnte (z. B. interrupted beim warten auf Schlüssel)
    • acquireWriteKey

      @NotNull public SyncKey<T> acquireWriteKey(T element, Duration timeout) throws SynchronizationFailedException
      Beschreibung aus Schnittstelle kopiert: SynchronizationManager
      Fordert exklusiven Zugriff (Schreibzugriff) auf das angegebene Element an. Ein Schreibzugriff darf nur angefordert werden, wenn dieser Thread noch keinen Lesezugriff besitzt. Ansonsten würde dies Deadlocks verursachen. Sollte dieser Thread bereits einen Schreibzugriff besitzen ist das jedoch kein Problem.
      Angegeben von:
      acquireWriteKey in Schnittstelle SynchronizationManager<T>
      Parameter:
      element - Element
      timeout - maximale Wartezeit zur synchronisierung
      Gibt zurück:
      Schlüssel zum Zugriff auf das Element. Solange der Schlüssel gültig ist, garantiert diese Klasse, kann kein anderer Thread einen anderen Schlüssel auf dieses Element hält.
      Löst aus:
      SynchronizationFailedException - Falls der Schlüssel nicht geholt werden konnte (z. B. timeout oder interrupted beim warten auf Schlüssel)
    • getLocks

      public com.google.common.collect.SetMultimap<T,SyncKey<T>> getLocks()
      Beschreibung aus Schnittstelle kopiert: SynchronizationManager
      Gibt alle aktuell angeforderten Schlüssel zurück. Diese Funktion existiert nur zum Debugging bzw. zur Fehleranalyse um z. B. bei Deadlocks den Zustand ausgeben zu können.
      Angegeben von:
      getLocks in Schnittstelle SynchronizationManager<T>
      Gibt zurück:
      alle aktuell angeforderten Schlüssel
    • toString

      public String toString()
      Setzt außer Kraft:
      toString in Klasse Object